首页 > 解决方案 > 如何grep(不)匹配每行末尾的特殊字符“/”(无引号)

问题描述

我想通过一个大文件来查找不以“/”结尾的行(无引号)。这是一个示例文件:

Folder1/clicker7Mac/
Folder1/clicker7Mac/clicker7.17.0_Mac/Resources/
Folder2/
Folder2/file of interest1.pdf
Folder2/Grades/
Folder2/Grades/another file of interest.pdf
Folder2/Grades/other files with unknown but not-slash extension
Folder2/Final_exam/
Folder2/Final_exam/a 3rd file.pdf
Folder2/Grades/an excel file of interest.xlsx
Folder2/Grades/Package_for_someone/
Folder2/HW/
Folder2/HW/HW1/

我只想要以文件结尾的行,而不是目录路径的行。即在这里我想要输出:

Folder2/file of interest1.pdf
Folder2/Grades/another file of interest.pdf
Folder2/Grades/other files with unknown but not-slash extension
Folder2/Final_exam/a 3rd file.pdf
Folder2/Grades/an excel file of interest.xlsx

我搜索了堆栈交换和 unix 论坛并尝试了以下方法(注意我已经反转了搜索,因为它更容易测试):

grep  '.*/' testfile
grep  '\w*/\b' testfile

(greps 所有单词和斜杠,也获取文件;grep -v 什么都不做)

grep  "[a-z.0-9]"'/\b' testfile

(所有斜线之前的最后一个字符;grep -v 什么都不产生)

grep  '\l*/\b' testfile
grep  '\>/' testfile

(所有斜线(不仅仅是结束斜线); grep -v 没有任何结果)

grep -F  '/\b' testfile

(fgrep 或 grep -F 视为文字字符串,不产生任何结果;grep -v 产生一切)

请问有什么解决办法吗?

标签: unixsearchgrepspecial-characters

解决方案


grep -v '/$' file

或者

grep '[^/]$' file

输出:

文件夹2/感兴趣的文件1.pdf
Folder2/Grades/另一个感兴趣的文件.pdf
Folder2/Grades/其他具有未知但非斜杠扩展名的文件
Folder2/Final_exam/第三个文件.pdf
Folder2/Grades/感兴趣的excel文件.xlsx

请参阅:man grep堆栈溢出正则表达式常见问题解答


推荐阅读