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 только в части имени файла в строке.
1 ответ
Попробуйте grepping как это:
grep -i 'dir1[^/]*$'
Это означает, что он примет совпадение, только если оно совпадает dir1
и этот матч не сопровождается /
до конца строки.