以下命令将从包含它的所有第 13,14,15...29 行中删除 PATTERN:
sed -i 13,29s/PATTERN// file
但是,我只想从第 13 行和第 29 行删除 PATTERN。显然,我可以使用
sed -i 13s/PATTERN//;29s/PATTERN// file
但是我的模式足够长,这会带来不便,所以我只想指定模式一次。有任何想法吗?我试图寻找答案,但一无所获。
此外,sed 使用逗号而不是破折号来匹配一系列行是否有正当理由?我觉得不合逻辑。
提前致谢。
最佳答案
使用awk:
awk 'NR == 13 || NR == 29 { sub(/PATTERN/, "") } { print }' file
当然,这里你必须使用awk兼容的re。 https://www.gnu.org/software/gawk/manual/html_node/Regexp.html#Regexp
第一部分达到了您的要求,第二部分只是打印出所有内容。您可以使用重定向将内容放入另一个文件中,然后移至原始位置。
关于regex - SED:从两条特定行中删除模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32084569/