Grep表达式排除了我想要的一些匹配

时间:2014-05-13 05:01:38

标签: regex linux bash unix grep

我正在开发一个从bash文件中提取注释并将它们输出到新文件的程序。

我需要忽略被''或“”引用所包含的#,我认为我已经正确地做了。

grep -oe "[^\'\"\\]#[^\'\"].*" somefile >> somecomments

这会提取一些文字之前的评论,例如

echo Sum: $Sum    # Displays the sum

将在输出文件中转换为“#显示总和”。 问题是以#开头的行现在因某种原因被排除在外。例如。

# Name
# Date

根本不会出现在输出文件中。

如何修复我的表达式,以便我仍然可以在#前面排除引号,但是要提取以#开头的行?

1 个答案:

答案 0 :(得分:0)

检查以下内容是否适用:

grep -oe "[^\'\"\\]#[^\'\"].*" -e "^#.*" somefile >> somecomments

但正如其中一条评论所说,你将不得不处理许多例外情况。

如果有像

这样的陈述怎么办?

echo '<space> ########### Following code does this #########<space>'

你必须记住所有这些机会。