文件中包含评论的所有行都以#
开头。如何删除以#
开头的所有行(以及只有那些行)?其他包含#
但不在行开头的行应该被忽略。
答案 0 :(得分:243)
答案 1 :(得分:48)
我有点惊讶没有人提出最明显的解决方案:
grep -v '^#' filename
这解决了所述的问题。
但请注意,一个共同的约定是从#
到行尾的所有内容都被视为注释:
sed 's/#.*$//' filename
但是,例如,将字符串文字中的#
字符视为评论的开头(可能与您的案例相关或不相关)(并且它留下空行)。
以任意空格开头后跟#
的行也可能被视为注释:
grep -v '^ *#' filename
如果空格只是空格,或
grep -v '^[ ]#' filename
其中两个空格实际上是一个空格,后跟一个文字制表符(输入“control-v tab”)。
对于所有这些命令,省略filename
参数以从标准输入读取(例如,作为管道的一部分)。
答案 2 :(得分:12)
与雷蒙德的解决方案相反:
sed -n '/^#/!p'
“不要打印任何内容,除了不以#”开头的行
答案 3 :(得分:6)
您可以将以下内容用于awk解决方案 -
awk '/^#/ {sub(/#.*/,"");getline;}1' inputfile
答案 4 :(得分:5)
这个答案建立在较早的answer by Keith。
之上 egrep -v "^[[:blank:]]*#"
应过滤注释行。
egrep -v "^[[:blank:]]*(#|$)"
应该过滤出注释和空行,这通常很有用。
有关[:blank:]
和其他角色类的信息,请参阅https://en.wikipedia.org/wiki/Regular_expression#Character_classes。
答案 5 :(得分:4)
您可以使用
直接编辑文件sed -i '/^#/ d'
如果您还想删除以某些空格开头的注释行,请使用
sed -i '/^\s*#/ d'
通常,您希望保留脚本的第一行,如果它是一个sha-bang,那么sed
不应该删除以#!
开头的行。它也应该删除只包含哈希但没有文本的行。把它们放在一起:
sed -i '/^\s*\(#[^!].*\|#$\)/d'
答案 6 :(得分:-3)
这是带有一些扩展名的所有文件的循环:
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