如何使用grep筛选不以特殊字符/结尾的行
解决方案:筛选非目录路径(不以/结尾的行)
这问题我太熟了,给你两个直接能用的命令,完美匹配你的需求:
方法1:反向排除以/结尾的行(推荐)
直接用grep的反向匹配功能,排除所有以/结尾的目录行:
grep -v '/$' testfile
解释:
-v:告诉grep输出不匹配指定模式的行/$:正则表达式,$代表行尾,所以这个模式精准匹配所有以/结尾的目录行,反向筛选后剩下的就是你要的文件路径。
方法2:直接匹配不以/结尾的行
也可以直接写正则匹配行尾不是/的行:
grep '[^/]$' testfile
解释:
[^/]:正则里的“否定字符集”,表示不是/的任意字符$:锚定到行尾,所以整个模式匹配“最后一个字符不是/”的行,正好对应文件路径。
为啥你之前的命令没生效?
核心问题都是没精准定位到「行尾的/」:
- 你用的
grep '.*/' testfile:这个模式会匹配任何位置的/(比如文件路径里的中间/),反向筛选会把所有带/的行都排除,自然得不到结果 - 带
\b的命令:\b是单词边界,而目录行的/后面是行尾,不属于单词边界,所以匹配不到行尾的/,反向后也没效果 grep -F '/\b':用了-F(固定字符串匹配),\b会被当成字面字符,根本匹配不到任何内容,反向后就返回所有行
内容的提问来源于stack exchange,提问作者SteveP
相关产品推荐
相关产品推荐

