从文件中删除所有以#开头的行
所有带有注释的行都以#开头。 我怎样才能删除所有以#开头的行(并且只有这些行)? 包含#其他行,但不在行首,应该被忽略。 
这可以用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