【发布时间】:2015-05-31 21:05:39
【问题描述】:
我在使用 grep 时遇到问题。 我有一个文件http://pastebin.com/HxAcciCa,我想检查某些模式。当我试图搜索它时,只要模式已经存在于给定文件中,grep 就会返回所有行。
为了解释更多,这是我正在运行的代码
grep -F "ENVIRO" "$file_pos" >> blah
无论我尝试什么,即使我提供一整行作为模式 bash 总是返回所有行。
这些是我正在尝试的变体:
grep -F "E20" "$file_pos" >> blah
grep E20 "$file_pos" >> blah
grep C:\E20-II\ENVIRO\SSNHapACS480.dll "$file_pos" >> blah
grep -F C:\E20-II\ENVIRO\SSNHapACS480.dll "$file_pos" >> blah
还有一些奇怪的原因,当向 grep 添加 -x 选项时,尽管存在确切的模式,但它不会返回任何行。
我已经在网络和 bash 文档中搜索了原因,但找不到任何东西。
我的最终测试如下
grep -F -C 1 "E20" "$store_pos" >> blah #store_pos has the same value as $file_pos
我认为可能是在结果之后打印行,但事实并非如此。 我正在使用 blah 文件来查看输出。 我也在使用 Linux mint rebecca。 最后虽然命名很熟悉这个问题和Why does grep match all lines for the pattern "\'"不相似
最后我想说我是 bash 的新手。 我怀疑错误可能是由于主文件http://pastebin.com/HxAcciCa 而不是代码?
【问题讨论】:
-
您正在附加到
blah。您将其截断为空的部分在哪里? -
grep -F C:\E20-II\ENVIRO\SSNHapACS480.dll "$file_pos"之类的东西不起作用,如果您希望将反斜杠传递给 grep,则需要对其进行转义或引用。所以:grep -F 'C:\E20-II\ENVIRO\SSNHapACS480.dll' "$file_pos"。这可以与-x结合使用。但是这个问题应该有相反的效果:你应该没有匹配,而不是每一行都匹配。 -
文件中的行尾问题?检查 hexdump 或
cat -vET filename。 -
显然如果我使用 wc -l 我得到计数 0,我生成了我正在从安装日志中搜索模式的文件,然后我在文件上使用了 grep 并在问题,即pastebin.com/HxAcciCa,将输出放入文件中。没有换行符是因为文件来自安装日志还是来自 grep?
-
$file_pos的值是多少?如果这是一个空字符串,那么所有的行都会被匹配。