我的文件很长,如下所示。
输入文件: -
Text Point
Blah
Blah
Blah
Blah
Blah
Blah
String
Blah
Blah
Blah
Blah
Blah
Blah
Text Point
Blah
Blah
Blah
Blah
Blah
Blah
Text Point
String
Blah
Blah
Text Point
Blah
Blah
Blah
String
Blah
Blah
Blah
Text Point
Blah
Blah
String
Blah
每次出现“文字点”后,在下次出现之前,我都希望'字符串'最多发生一次。如果在输出文件的两个连续“文本”点之间发生字符串,我就会提取字符串。如果没有出现,我还要设置短划线。
在这种情况下,我需要像这样的输出
String
-
String
String
String
我尝试使用以下命令
sed -n '/Text point/{:a;N;/^\n/s/^\n//;/Text point/{p;s/.*//;};ba};' $1 | grep "String" >> Outfile
但问题是当字符串未被发现时它不会向outfile附加任何内容。 所以请帮我解决问题。感谢。
答案 0 :(得分:1)
我有 perl
的解决方案use strict;
use warnings;
$/="Text Point";
while(<>) {
if(/String/m) {
print "String \n" ;
}
else{
print "- \n" ;
}
}
答案 1 :(得分:0)
awk '/^Text Point/{print p; p="-" } /String/{ p=$0} END{print p}' input
答案 2 :(得分:0)
使用perl one-liner
perl -0777 -ne 'print /(.*String.*\n)/ ? $1 : "-\n" for split /(?=Text Point)/' file
切换:
-0777
:Slurp整个文件-n
:为输入文件中的每个“行”创建一个while(<>){...}
循环。 -e
:告诉perl
在命令行上执行代码。