Как выполнить поиск (не) совпадения со специальным символом "/" (без кавычек) в конце каждой строки - PullRequest
1 голос
/ 29 сентября 2019

Я хочу просмотреть большой файл для строк, не заканчивающихся на "/" (без кавычек).Вот пример файла:

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

(grep-все слова и слэши, также принимает файлы; 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 даёт всё)

Какие-нибудь решения, пожалуйста?

Ответы [ 3 ]

1 голос
/ 29 сентября 2019

Используйте grep -v, чтобы исключить все строки, заканчивающиеся на /:

$ grep -v '/$' testfile
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

-v является переносимым и задается POSIX .

1 голос
/ 29 сентября 2019

Если awk является опцией:

awk -F'/' '$NF' file
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

Он устанавливает Разделитель полей на /, а затем проверяет, содержит ли последнее поле какую-либо вещь, и затем выполняет действие по умолчанию, печатает строку.

Еще один вариант, более похожий на решение grep, проверьте, не заканчивается ли строка /:

awk '!/[/]$/' file
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
1 голос
/ 29 сентября 2019
grep -v '/$' file

или

grep '[^/]$' file

Вывод:

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

См .: man grep и Часто задаваемые вопросы о регулярных выражениях переполнения стека

...