使用sed替换特定的行号

4

我使用以下内容替换 29 到 32 行的文本:

sed -i '29,32 s/^ *#//' file

我该如何在上述命令中添加行号,例如第35到38行,第43行和第45行?


可能更好使用awkawk 'NR > 28 && NR < 32 || NR > 34 && NR < 39 || NR == 43 || NR == 45 {#do gsub#}' file - Chem-man17
@VarunM感谢提供的备选方案,不过我会选择下面这个答案。 - S R
2个回答

5
使用GNU sed。这里的m是一个标签。
sed -i '29,32bm;35,38bm;43bm;45bm;b;:m;s/^ *#//' file

来自 man sed

b label: 跳转到标签;如果省略标签,则跳转到脚本的末尾。

: label: 用于 b 和 t 命令的标签。


1
太棒了!像魔法一样运行..谢谢 :) - S R

0
这可能适用于您(GNU sed):
cat <<\! | sed 's:$:s/^ *#//:' | sed -f - -i file
29,32
35,38
43,45
!

创建一个Here-Document,其中包含您想要的行范围,并将其传递给一个sed脚本,该脚本创建另一个sed脚本,然后针对所需文件运行该脚本。

Here-Document可以被文件替换:

sed 's:$:s/^ *#//:' lineRangeFile | sed -f - -i file

感谢@potong提供的替代方案。我选择了上面的解决方案。 - S R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接