我想执行sed的匹配任何命令行的任一and或or多个命令:例如,sed '50,70/abc/d'将删除范围内的所有行50,70匹配/abc/,还是有办法做sed -e '10,20s/complicated/regex/' -e '30,40s/complicated/regex/,而无需重新输入s/compicated/regex/
Joh*_*024 10
该and部分可以用大括号完成:
sed '50,70{/abc/d;}'
此外,可以针对多种and条件嵌套大括号.
(以上是在GNU下进行测试的sed.BSD sed在细节方面可能有所不同,但细节却令人沮丧.)
该or部分可以通过分支处理:
sed -e '10,20{b cr;}' -e '30,40{b cr;}' -e b -e :cr -e 's/complicated/regex/' file
10,20{b cr;}
对于从10到20的所有行,我们分支到标签 cr
30,40{b cr;}
对于从30到40的所有行,我们分支到标签 cr
b
对于所有其他行,我们跳过其余的命令.
:cr
这标志着标签 cr
s/complicated/regex/
这在分支的行上执行替换cr.
使用GNU sed,上面的语法可以缩短为:
sed '10,20{b cr}; 30,40{b cr}; b; :cr; s/complicated/regex/' file