Ray*_*ger 270
这可以通过sed one-liner完成:
sed '/^#/ d'
Run Code Online (Sandbox Code Playgroud)
这就是说,"找到以#开头并删除它们的所有行,留下其他所有行."
Kei*_*son 51
我有点惊讶没有人提出最明显的解决方案:
grep -v '^#' filename
Run Code Online (Sandbox Code Playgroud)
这解决了所述的问题.
但请注意,一个常见的约定是从#一行到一行的所有内容都被视为注释:
sed 's/#.*$//' filename
Run Code Online (Sandbox Code Playgroud)
但是,例如,将#字符串文字中的字符视为注释的开头(可能与您的情况相关或不相关)(并且它留下空行).
以任意空格开头的行#也可以视为注释:
grep -v '^ *#' filename
Run Code Online (Sandbox Code Playgroud)
如果空格只是空格,或者
grep -v '^[ ]#' filename
Run Code Online (Sandbox Code Playgroud)
其中两个空格实际上是一个空格,后跟一个文字制表符(类型为"control-v tab").
对于所有这些命令,省略filename从标准输入读取的参数(例如,作为管道的一部分).
ata*_*ata 13
与Raymond的解决方案相反:
sed -n '/^#/!p'
Run Code Online (Sandbox Code Playgroud)
"不要打印任何东西,除了不以#开头的行
您可以将以下内容用于awk解决方案 -
awk '/^#/ {sub(/#.*/,"");getline;}1' inputfile
Run Code Online (Sandbox Code Playgroud)
您可以直接使用
sed -i '/^#/ d'
Run Code Online (Sandbox Code Playgroud)
如果您还想删除以空格开头的注释行
sed -i '/^\s*#/ d'
Run Code Online (Sandbox Code Playgroud)
通常,您希望保留脚本的第一行(如果是shabang),因此sed不应删除以开头的行#!。它也应该删除仅包含哈希而不包含文本的行。放在一起:
sed -i '/^\s*\(#[^!].*\|#$\)/d'
Run Code Online (Sandbox Code Playgroud)
为了与所有sed变体保持一致,您需要在该-i选项中添加备用扩展名:
sed -i.bak '/^\s*#/ d' $file
rm -Rf $file.bak
Run Code Online (Sandbox Code Playgroud)
这个答案建立在Keith先前的回答之上.
egrep -v "^[[:blank:]]*#" 应过滤注释行.
egrep -v "^[[:blank:]]*(#|$)" 应该过滤掉注释和空行,这通常很有用.
有关[:blank:]其他字符类的信息,请参阅https://en.wikipedia.org/wiki/Regular_expression#Character_classes.