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