我正在编写一个简单的shell脚本,它将注释掉尚未注释掉的所有代码行。我在确定正确的条件sed命令时遇到麻烦。 sed命令可以在任何文件中添加#,但是现在我需要使其成为有条件的,这样我才不会在已经注释掉的行上以两个##结尾。
我一直在尝试使用不同的sed命令,但对Bash还是陌生的,无法弄清其神秘的语法!
sed -i -e "/^#/! 's/^/#/' $file
sed命令的第一部分是错误的。我遇到了一个错误,如果没有sed命令的第一部分,则该文件的所有行都将添加一个#,即使该行上已经存在该行。任何帮助将不胜感激!
谢谢!
答案 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