从文件中删除所有以#开头的行

所有带有注释的行都以#开头。 我怎样才能删除所有以#开头的行(并且只有这些行)? 包含#其他行,但不在行首,应该被忽略。

这可以用sed单行来完成:

 sed '/^#/ d' 

这就是说,“find所有以#开头的行,并删除它们,把所有其他东西都删除。

我有点惊讶没有人提出最明显的解决scheme:

 grep -v '^#' filename 

如上所述解决了这个问题。

但请注意,从#到行尾的所有内容都被视为一个注释:

 sed 's/#.*$//' filename 

尽pipe它将string中的#字符视为注释的开始(这可能与您的情况相关,也可能不相关)(并且会留下空行)。

以任意空格开头并跟随#一行可能也被当作注释来处理:

 grep -v '^ *#' filename 

如果空白只是空格,或者

 grep -v '^[ ]#' filename 

其中两个空格实际上是一个空格,后跟一个字面制表符(键入“control-v tab”)。

对于所有这些命令,省略从标准input读取的filename参数(例如,作为pipe道的一部分)。

雷蒙德解决scheme的反面:

 sed -n '/^#/!p' 

“不要打印任何东西,除了不以#开始的行”

你可以使用下面的awk解决scheme –

 awk '/^#/ {sub(/#.*/,"");getline;}1' inputfile 

这个答案build立在基思早期的答案上 。

egrep -v "^[[:blank:]]*#"应该过滤掉注释行。

egrep -v "^[[:blank:]]*(#|$)"应该过滤掉注释和空行,这是经常使用的。

有关[:blank:]和其他字符类的信息,请参阅https://en.wikipedia.org/wiki/Regular_expression#Character_classes

删除评论符号(#),但保持行的其余部分,并保持沙包:

  awk '{ if( ($0 !~ /^ *#/) || ($0 ~ /^ *#!/) ) print $0 ; else {gsub(/^ *#/ , "" ); print } } ' teste.sh nter code here 

你可以直接编辑你的文件

 sed -i '/^#/ d' 

如果您还想删除以某些空格开头的注释行

 sed -i '/^\s*#/ d' 

通常情况下,你想保留你的脚本的第一行,如果它是沙包,所以sed不应该删除以#!开头的行#! 。 也应该删除只包含散列但不包含文本的行。 把它放在一起:

 sed -i '/^\s*\(#[^!].*\|#$\)/d' 

这里有一个循环,用于扩展所有文件:

 ll -ltr *.filename_extension > list.lst for i in $(cat list.lst | awk '{ print $8 }') # validate if it is the 8 column on ls do echo $i sed -i '/^#/d' $i done