如果我做:
$ ls -R
.:
4Shared/ Cloud/
./4Shared:
UFAIZLV2R7.part3.rar
./Cloud:
UFAIZLV2R7.part2.rar.part
UFAIZLV2R7.part1.rar.part
UFAIZLV2R7.part4.rar.part
Run Code Online (Sandbox Code Playgroud)
如果我只想列出.rar文件,并且我使用grep,它也会向我显示.rar.part文件,这不是我的愿望。
我正在使用find或ls **/*.rar按照此线程中的说明解决此问题并且它们工作正常,但我想了解是否可以通过grep.
我试过(考虑EOL):
ls -R | grep ".rar\n"
Run Code Online (Sandbox Code Playgroud)
没有结果。
我想,如果greping发现问题出在发现在该行的末尾,但我不知道。
请问这里有什么帮助吗?
jor*_*anm 119
所述$锚的线的端部相匹配。
ls -R | grep '\.rar$'
Run Code Online (Sandbox Code Playgroud)
您也可以find为此使用:
find . -name '*.rar'
Run Code Online (Sandbox Code Playgroud)
Hau*_*ing 11
除了您的问题,请注意.rar不仅匹配“.rar”,而且匹配 .rar.之前的每个字符(包括)rar。在这种情况下可能不是问题,但.必须在正则表达式中转义。
ls -R | grep "\.rar$"
Run Code Online (Sandbox Code Playgroud)
您还可以指示grep从单词边界开始查找字符串。在.(非单词字符)和r(单词字符)之间存在这样的边界。根据您的grep实现,单词边界运算符可以是\b或可能是\<或[[:<:]](仅单词的左边边界),\>或[[:>:]](右边)。
$ ls -R | grep '\brar$'
Run Code Online (Sandbox Code Playgroud)
假设我有这个示例数据。
$ ls -1
afile.rar
xrar
UFAIZLV2R7.part1.rar.part
UFAIZLV2R7.part2.rar.part
Run Code Online (Sandbox Code Playgroud)
此命令将仅查找具有.rar扩展名的文件。
$ ls -R | grep '\brar$'
afile.rar
Run Code Online (Sandbox Code Playgroud)
元字符
\b是像插入符号和美元符号一样的锚点。它在称为“词边界”的位置匹配。这个匹配是零长度的。
如果您有命名的文件,blah-rar这些文件也会被检测到。
$ ls -R | grep '\brar$'
afile-rar
afile.rar
Run Code Online (Sandbox Code Playgroud)
这是因为字母数字以外的字符通常被视为边界字符,因此会跳过这种方法。