【发布时间】:2023-03-23 06:18:01
【问题描述】:
我有一个文本文件“text.txt”,它包含一堆带文本的行(或空行)。
我正在尝试形成一个单一的 sed/awk 命令行命令,它可以让我注释掉任何类似的内容(通过在我指定的任何行号的开头添加一个“#”)。
例如,文本文件可能如下所示:
A
B
C
D
我想发出一个指定第 2 行的命令,所以它看起来像:
A
#B
C
D
如果可以指定行的范围,那么可以修改多行,例如“2-4”或 2,3,4”,这也会有所帮助。
我发现(对我而言)关于 sed 中的 -n 和 -e 选项的信息相互矛盾,并且无法完全按照我的希望工作。我正在使用 Kubuntu 18.04。
有什么建议吗?谢谢。
我一直在将我在其他问题中发现的概念串在一起,比如必须保留这条线,但在它的开头添加“#”,所以我有“s/(.*)/#$1 /" 作为后面的替换。
我认为它可以作为:
sed '2,4!s/(.<em>)/#$1/' text.txt </em>
但是,我得到s/.: Event not found.
这似乎有一些好的部分,但是,它并没有像我希望的那样工作,它只处理一行,而不是所有行cat text.txt | sed -n '2{s/(.)/#$1/;p}'
【问题讨论】:
-
欢迎来到 SO,在 SO 上,我们确实鼓励用户添加他们为解决自己的问题而付出的努力,所以请在您的问题中添加相同的内容,然后让我们知道。
-
你为什么要否定地址?如果你想在第 2 行到第 4 行的开头添加 #,只需执行
sed -e '2,4s/^/#/'
标签: linux shell awk sed command-line