regex - SED:从两条特定行中删除模式

标签 regex bash sed

以下命令将从包含它的所有第 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/

相关文章:

java - 如何正则表达式匹配排除某些字符?

regex - 如何在 Perl 中使用 REGEX 查找字符串中的第 n 个字符或数字

linux - 了解 bash 大括号扩展

bash - 如果我用相同的名称定义,如何在 bash 中调用内部函数?

regex 和 sed 命令匹配相对路径文件名

regex - 用 vim 替换单词边界

javascript - 从 json 响应确定最暗的十六进制代码

java - 当 str 是点 ("."时,如何让 Pattern.matches(regex, str) 返回 false ?

bash - 将 shell 参数传递给 awk 不起作用

regex - 在 Linux 文件名中替换双引号以及其他无效的 Windows 文件名字符