Назад | Перейти на главную страницу

Grep текстовый файл с (найти сгенерированные) файлы, но игнорировать пути

Я получаю огромный текстовый файл, созданный с помощью find.

Содержимое сгенерированного текстового файла - это ссылка на файл с полным путем, то есть:

//server/dir1/dir1foobar.ext
//server/dir1/dir2/dir1bar.ext
//server/dir1/dir2/dir1.ext
//server/dir3/dir4/dir4.ext
//server/dir5/dir6/dir7/dir1foo.ext
//server/dir1/dir2/dir3/dir2.ext
//server/dir3/dir4/dir5/dir6/dir3.ext

(имена файлов и пути случайны, поэтому я не могу всегда начинать с позиции n с начала или с конца строки)

мне нужно grep этот текстовый файл для определенного шаблона, запишите результаты (которые должны быть полной строкой для совпадения) в новый (отсортированный с sort) файл, но также необходимо игнорировать любое совпадение, которое не является именем файла.

Итак, с моими приведенными выше примерами строк у меня есть шаблон поиска "dir1", и результатом должен быть новый файл, содержащий эти строки:

//server/dir1/dir1foobar.ext
//server/dir1/dir2/dir1bar.ext
//server/dir1/dir2/dir1.ext
//server/dir5/dir6/dir7/dir1foo.ext

Мои попытки с sort -f -u $textfile | grep -i $pattern > $newfile не были успешными, потому что grep также имеет совпадение, когда каталог содержит шаблон, что приведет к "ложному" совпадению для //server/dir1/dir2/dir3/dir2.ext.

Я читаю в grep руководство, что регулярное выражение возможно с опцией -G но не мог найти способ использовать grep только в части строки с именами файлов.

Попробуйте использовать grep следующим образом:

grep -i 'dir1[^/]*$'

Это означает, что он примет совпадение, только если оно совпадает dir1, и это совпадение не сопровождается никакими / до конца строки.