仅在未注释的行中查找字符串

仅在未注释的行中查找字符串

如何 grep 仅在未注释行中的字符串?我不希望结果包含在注释行中的字符串中。例如:在 file.tx 中

My name is Jane
#My name is Sara

我想 grep 单词“name”并打印输出,如下所示:-

My name is Jane

但我不希望显示注释行。

谢谢

答案1

如果没有更多细节,就不可能给出完美的答案。您可以按照以下方式运行:

remove the comments (and maybe literal strings)   | 
grep in the output

删除注释(多行或非多行)可能很棘手......我们至少需要一个特定于语言的词法分析器来正确处理它。

无论如何,我们可以编写一个快速 hack(不是那么健壮),下面是带有 C 注释的示例:

   perl -0pe 's!/\*.*?\*/!!gs' x.c   | grep searchstring

答案2

如果您想打印文件中未注释掉的行,那么下面的命令会很方便。

grep -v '^ *#' filename.txt  | grep searchstring

-v -> 反转
-v "^ *#" -> 打印起始行中没有“#”的行(# ABC - 这行也被避免)

它已经为我工作了很长一段时间&我用它来显示活动的 crontab 作业。

答案3

像这样的东西可以工作(假设注释行以符号开头#):

grep -v '^#' myfile.txt | grep string_to_search

您可以替换#为任何表示注释行的符号(CcdD或例如*!

相关内容