Tom*_*eif 3 sed text-processing
我正在尝试在casestartStr和endStrcase之间获取所有内容bbb。我明白,我怎么能得到之间的所有事件startStr和endStr使用sed。我不明白我如何将它限制在bbb发生的一个实例上。
样本输入:
fff
startStr
aaa
bbb
ccc
endStr
xxx
yyy
startStr
ddd
endStr
ddd
bbb
Run Code Online (Sandbox Code Playgroud)
所需输出:
startStr
aaa
bbb
ccc
endStr
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的:
$ sed -n -e '/startStr/,/endStr/ p' sample.txt
startStr
aaa
bbb
ccc
endStr
startStr
ddd
endStr
Run Code Online (Sandbox Code Playgroud)
对于第一个startStr… endStr,包含/bbb/出现:
sed -n '/startStr/ {:n; N; /endStr/ {/\n[^\n]*bbb[^\n]*\n/ {p; q}; b}; bn}'
Run Code Online (Sandbox Code Playgroud)
或者
sed -n '/startStr/ {:n; N; /endStr/ {/\nbbb\n/ {p; q}; b}; bn}'
Run Code Online (Sandbox Code Playgroud)
ifbbb不是正则表达式,它正是您需要的字符串(从开始到\n)。
对于地址,/startStr/我们:
:n;N;/endStr/;
/\nbbb\n/我们读取的这个块中的出现;
{p; q}执行“打印并退出”,b为«抛出这个块并开始搜索下一个»;:n,即继续阅读。