如何用grep仅匹配完整路径?路径与文件名已用冒号分隔
解决你的grep筛选问题
嘿,我来帮你搞定这个grep的难题!先看看你整理的这个列表:
1 /c/Users/Michael : tutorial_2.sh
2 /c/Users/Michael : tutorial_1.sh
3 /c/Users/Michael : tutorial_3.sh
4 /c/Users/Michael : tutorial_7.sh
5 /c/Users/Michael/desktop/here : myfile.sh
6 /c/Users/Michael : tutorial_7.sh
7 /c/Users/Michael/desktop/here : myfile.sh
8 /c/Users/Michael : tutorial_7.sh
9 /c/Users/Michael/...
你用冒号(带前后空格)分隔路径和文件名的思路很清晰,之前的方案没用大概率是没精准匹配到这个空格细节。下面给你几个实用的grep命令,覆盖常见的筛选场景:
1. 筛选特定文件名的行
比如要找出所有包含tutorial_7.sh的条目,直接精准匹配冒号后的文件名:
grep ": tutorial_7.sh$" your_list.txt
- 这里的
:(冒号加空格)确保匹配到路径和文件名的分隔符,避免误匹配路径里的潜在冒号 $锚定行尾,确保只匹配完整的文件名,不会出现比如匹配tutorial_7.sh.bak这类情况
2. 筛选特定路径的行
如果要找路径包含desktop/here的所有条目,就匹配路径部分加分隔符:
grep "/desktop/here :" your_list.txt
这个命令会精准定位到路径里的/desktop/here,后面跟着冒号和空格,不会误匹配其他相似路径。
3. 找出重复的条目
你的列表里有几个重复的路径+文件名组合,用grep配合sort和uniq就能快速找出:
# 找出所有重复的行 sort your_list.txt | uniq -d # 如果想统计每个重复条目的出现次数 sort your_list.txt | uniq -c
4. 提取所有文件名(额外小技巧)
如果只想把所有文件名提取出来,用grep的反向匹配也能实现:
grep -o ": .*$" your_list.txt | sed 's/: //'
-o只输出匹配的部分,这里匹配冒号加空格到行尾的内容- 再用sed去掉前面的
:,就得到纯文件名了
如果还有其他特定的筛选需求,随时说!
内容的提问来源于stack exchange,提问作者Michael91
相关产品推荐
相关产品推荐

