删除shell中#(数字符号)后面的注释

时间:2017-06-07 17:02:23

标签: bash

我有一个文本文件text0.txt,如

# text0.txt
# This is comment
Hello, I like banana.  # more comments
bra bra bra...

问题是命令是什么

$ some_command text0.txt

输出

Hello, I like banana.  
bra bra bra...

到标准输出。

我正在使用bash。 感谢。

2 个答案:

答案 0 :(得分:2)

您想要删除以#开头的行,并删除行上任何其他地方的#及其后任何字符。该描述实际上定义了sed脚本应该是什么样的:

sed -e '/^#/d' -e 's/[[:space:]]*#.*//' text0.txt

这也删除了行末#之前的所有空格。如果你坚持的话,你可以将它组合成一个参数:

sed '/^#/d; s/[[:space:]]*#.*//' text0.txt

就我个人而言,我认为当他们分别参与单独的操作时,阅读单独的操作会更容易,但这是您可以为自己做出的选择。

请注意,无需运行两个(或更多)命令;一个就够了。

答案 1 :(得分:1)

用awk:

awk '{a=length($0);gsub("#.*","",$0); if(a==0 || length($0)>0)print $0}' filename