我在使用grep时遇到问题.我有一个文件http://pastebin.com/HxAcciCa,我想检查某些模式.当我试图搜索它时,grep会返回所有行,前提是该模式已存在于给定文件中.
为了解释更多,这是我正在运行的代码
grep -F "ENVIRO" "$file_pos" >> blah
Run Code Online (Sandbox Code Playgroud)
无论我尝试什么,即使我提供整行作为模式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
Run Code Online (Sandbox Code Playgroud)
同样由于某些奇怪的原因,在向grep添加-x选项时,尽管存在确切的模式,但它不会返回任何行.
我搜索了网络和bash文档的原因,但找不到任何东西.
我的最终测试如下
grep -F -C 1 "E20" "$store_pos" >> blah #store_pos has the same value as $file_pos
Run Code Online (Sandbox Code Playgroud)
我想也许是在结果后打印线条但事实并非如此.我正在使用blah文件来查看输出.我也在使用Linux薄荷丽贝卡.最后虽然命名很熟悉但这个问题与grep为什么匹配模式"\"的所有行都不相似
最后我想说我是bash的新手.我怀疑错误可能是由于主文件http://pastebin.com/HxAcciCa而不是代码?
从注释来看,该文件似乎有回车符来分隔行,而不是grep预期的换行符;结果,grep将文件视为一大行,整个文件要么匹配,要么不匹配。
(注意:关于如何在“纯文本”文件中分隔行,至少存在三种不同的约定——unix 使用换行符 ( \n),DOS/Windows 使用回车符后跟换行符 ( \r\n),以及 OSX 之前版本的 MacOS仅使用回车符 ( \r)。)
我不清楚你的文件是如何以这种格式结束的,但你可以通过以下方式轻松修复它:
tr '\r' '\n' <badfile >goodfile
Run Code Online (Sandbox Code Playgroud)
或即时使用:
tr '\r' '\n' <badfile | grep ...
Run Code Online (Sandbox Code Playgroud)