【发布时间】:2018-08-22 03:41:21
【问题描述】:
我试图在文件中 grep 包含 # 和 -- 作为注释的单词。我使用的命令是
grep "^[^#]" -H -R -I "pathtofile" | grep "^[^--]" | grep -in ${1} | awk -F : ' { print $2 } ' | uniq)
这将打印特定单词的文件名。但是,如果有这样的一行
--test_specific_word_test test
上面的代码会将上面的代码视为不跳过它。这种情况也适用于注释与var=1 --comment等代码一致的地方。
我应该先使用 sed 删除注释行还是只使用 grep。
缺点是我有大量文件要搜索,而 GNU grep 是 2.0,我无法升级 grep 版本,因为我没有权限。
【问题讨论】:
-
真的不清楚你在问什么。
grep '^[^--]'看起来像是个错误——你的意思是grep -ve '--'吗?无论如何,如果您在此管道中使用 Awk,您不妨将其全部重构为 Awk 脚本(然后,您拥有哪个grep版本并不重要。顺便说一句,仅 2.0 并没有透露任何内容-- 你的意思是你有 GNUgrep2.0?) -
@tripleee。该语句用于行首并在括号中否定 -- 。我误解了我的解释吗?我怎样才能使用 awk 来完成这个?我需要它来打印文件名 awk 能做到吗?是的,我有 GNU grep 2.0
-
它寻找一个不是
-和-的字符,这显然是多余的。您是否期望不在行首的--被此过滤掉? -
如果没有更详细的要求,您的管道在做什么或做错了什么并不明显。但是例如
grep -nv 'regex' | grep 'poo' | awk '{ print $2 }'可以重构为awk '!/regex/ && /poo/ { print FNR ":" $2 }' -
请记住,
[--]与[-]完全相同——括号定义了一个 字符类,它只匹配一个字符——哪一组字符一个字符可以取决于这些括号的内容。