我的文件包含:
分割鲍勃正在工作琳达正在读书约翰正在读书+ b吃+ b喝酒+ j听分割约翰正在开车琳达正在做饭鲍勃正在睡觉+ b打鼾……
可能不是最短的,但这是一个简单的sed版本:
sed <file -E ' :l; /(^|\n)segment[ \t]*$/!{ N; s/(^|\n)(.)([^\n]*)[ \t](.*)\n[+]\2[ \t]+([^\n]*)/\1\2\3\5\4/; bl; } '
如果 perl 是您的选择,请尝试以下方法:
perl
perl -ne ' s/\s+$//; if (/^segment/) { push(@ary, $_); print(join("\n", @ary), "\n"); undef @ary; } elsif (/^(\S)\S*\s+is/) { push(@ary, $_); $index{$1} = $#ary; } elsif (/^\+(\S)\s+(\S+)/) { $ary[$index{$1}] .= " $2"; } ' file.txt
输出:
segment bob is working eating drinking linda is studying john is reading listening segment john is driving linda is cooking washing bob is sleeping snoring segment
-n
awk -n
s/\s+$//
if (/^segment/)
@ary
elsif (/^(\S)\S*\s+is/)
bob is working
elsif (/^\+(\S)\s+(\S+)/)
+b eating
eating
我可以写一个脚本 awk 同样,但脚本将是 更长的时间。我更喜欢 perl 因为它的灵活性(和古怪)。 希望这可以帮助。
awk