gpt4 book ai didi

bash - grep(fgrep) bash 精确匹配行尾

转载 作者:行者123 更新时间:2023-11-29 09:47:15 24 4
gpt4 key购买 nike

我有下面的示例文件

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 并只转义特殊字符:grep 'File\[Three\]Days$'

不过,如果你想使用 fgrep,你可以使用一些 tr 技巧来帮助你。如果你想要的只是文件名(没有目录名),你可以做类似的事情

cat files.md5 | tr '/' '\n' | fgrep FileThreeDays

那个 tr 命令用换行符替换斜杠,所以它会将每个文件名放在自己的行上。这意味着 fgrep 只会在搜索 FileThreeDays 时找到文件名。

如果你想要带目录的完整文件名,这有点棘手,但类似的方法会奏效。假设 SHA 和文件名之间总是有一个双空格,并且没有任何文件名中有双空格或制表符,您可以尝试这样的操作:

sed 's/  /\t' files.md5 | tr '\t' '\n' | fgrep FileThreeDays

sed 命令将双空格转换为制表符。 tr 命令将这些制表符变成换行符(与上面的技巧相同)。

关于bash - grep(fgrep) bash 精确匹配行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30558459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com