我有一个单行程序,可以在两行之间打印行,但是我想添加另一个条件来打印该块,如果有一行符合* .pm:
perl -e 'while(<>){s/^/$ARGV:/; print if m#VLOG {Updated files}# .. m#VLOG {Priority}#;}'
示例数据:
VLOG {Updated files}
files/skel/usr/local/cp/Modules/vsap/config.pm
files/skel/usr/local/cp/Modules/vsap/files/list.pm
files/skel/usr/local/cp/lib/i386-linux-thread-multi/perllocal.pod
files/skel/usr/local/cp/templates/default/cp/files/dirdialog.xsl
VLOG {Removed files}
VLOG {Priority}
非常感谢任何帮助。感谢。
答案 0 :(得分:1)
perl -ne 'BEGIN{ $/ ="VLOG {Priority}$/" } s/^/$ARGV:/gm; print $1 if /^(VLOG {Updated files}.*?\.pm.*)/sm'
答案 1 :(得分:1)
首先,您需要保存可能要打印的行,并在最后打印它们:
perl -e 'while(<>){s/^/$ARGV:/; push @save,$_ if m#VLOG {Updated files}# .. m#VLOG {Priority}#;} print @save;'
现在你要查找以'.pm'结尾的行,只有在看到一行时才会打印:
perl -e 'while(<>){s/^/$ARGV:/; do {push @save,$_; $sawPM = 1 if /\.pm/; } if m#VLOG {Updated files}# .. m#VLOG {Priority}#;} print @save if $sawPM;'