Text-Processing
如何將不以’<‘開頭的行附加到上一行
我有一個包含 XML 行的日誌。範例格式如下:
<head> <body> <line> asdasd</line> </body> </head>
我想掃描日誌文件並將不以“<”開頭的行附加到上一行。輸出如下:
<head> <body> <line>asdasd</line> </body> </head>
謝謝
Perl 來救援!
perl -pe 'print "\n" if /^\s*+</; chomp;' input > output
即從每一行中刪除換行符,並在下一行以空格開頭時列印,然後是
<
.要保留最後的換行符,請更改
chomp
為chomp unless eof
或添加END { print "\n" }
我想我之前已經說過了——但有可能聽起來像一張卡住的唱片——不要使用正則表達式來解析 XML。它很脆,容易折斷。不過,我首先要問的是-您為什麼要嘗試做您正在做的事情?因為在使用 XML 時它應該是無關緊要的。
而是使用解析器:
#!/usr/bin/env perl use strict; use warnings; use XML::Twig; my $twig = XML::Twig->parsefile('your_file.xml'); foreach my $elt ( $twig->get_xpath('//#PCDATA') ) { $elt->set_text( $elt->trimmed_text ); } $twig->set_pretty_print('indented_a'); $twig->print;
這可以滿足您的需求…但是如果您實際上是在正常使用 XML,那麼該
trimmed_text
方法可能無論如何都不需要進行此處理。