如何 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
您可以替换#
为任何表示注释行的符号(C
、c
、d
、D
或例如*
)!