在文件中尚未以“#”开头的行的第一个字符添加#

时间:2019-07-24 21:33:20

标签: bash sed

我正在编写一个简单的shell脚本,它将注释掉尚未注释掉的所有代码行。我在确定正确的条件sed命令时遇到麻烦。 sed命令可以在任何文件中添加#,但是现在我需要使其成为有条件的,这样我才不会在已经注释掉的行上以两个##结尾。

我一直在尝试使用不同的sed命令,但对Bash还是陌生的,无法弄清其神秘的语法!

sed -i -e "/^#/! 's/^/#/' $file

sed命令的第一部分是错误的。我遇到了一个错误,如果没有sed命令的第一部分,则该文件的所有行都将添加一个#,即使该行上已经存在该行。任何帮助将不胜感激!

谢谢!

2 个答案:

答案 0 :(得分:0)

由于dup的重复,我找不到以前的答案来关闭它,还没有人做过,所以在这里:

$ cat file
foo
#bar

POSIX:

$ sed 's/^/#/; s/^##/#/' file
#foo
#bar

$ sed 's/^#\{0,1\}/#/' file
#foo
#bar

$ sed 's/^\([^#]\|$\)/#\1/' file
#foo
#bar

GNU:

$ sed 's/^#\?/#/' file
#foo
#bar

还有无数其他选择...

答案 1 :(得分:0)

awk版本

awk '{print (/^#/?"":"#")$0}' file