【发布时间】:2015-05-31 14:18:39
【问题描述】:
我有下面的示例文件
d41d8cd98f00b204e9800998ecf8427e /home/abid/Testing/FileNamesTest/apersand $ file
d41d8cd98f00b204e9800998ecf8427e /home/abid/Testing/FileNamesTest/file[with square brackets]
d41d8cd98f00b204e9800998ecf8427e /home/abid/Testing/FileNamesTest/~$tempfile
017a3635ccb76250b2036d6aea330c80 /home/abid/Testing/FileNamesTest/FileThree
217a3635ccb76250b2036d6aea330c80 /home/abid/Testing/FileNamesTest/FileThreeDays
d41d8cd98f00b204e9800998ecf8427e /home/abid/Testing/FileNamesTest/single quote's
我想 grep 文件的最后一部分(文件名),但我想要完全匹配该行的最后一部分(文件名)
grep FileThree$ files.md5
017a3635ccb76250b2036d6aea330c80 /home/abid/Testing/FileNamesTest/FileThree
返回一个完全匹配并且没有找到我所追求的“FileThreeDays”,但由于某些文件名包含方括号,我不得不使用 grep -F 或 fgrep。但是像上面那样使用 fgrep 不起作用,它什么也不返回。
如何使用 fgrep 精确匹配行的最后一部分,同时仍然尊重上面的特殊字符 ~ / $ / ' / [ ] 等...或使用 awk 的任何其他方法...
进一步......
使用 fgrep 而不返回这两个文件我只想要完全匹配(使用上面的 $ 和 grep),但是 $ 和 fgrep 不返回任何内容。
grep -F FileThree files.md5
017a3635ccb76250b2036d6aea330c80 /home/abid/Testing/FileNamesTest/FileThree
217a3635ccb76250b2036d6aea330c80 /home/abid/Testing/FileNamesTest/FileThreeDays
【问题讨论】:
-
您最好使用常规 grep 并转义需要使用 \ 转义的字符。我在下面发布了一个替代答案。
-
这适用于您上面的示例文件:
fgrep -w FileThree files.md5。如果您还有一个名为FileThree的目录,它就会中断。尽管如此,-w在很多情况下都能让你的生活变得更简单。