LINUX.ORG.RU
решено ФорумAdmin

grep поиск до определенного слова

 , , ,


1

1

может ли grep искать до определённого слова и останавливать поиск после этого? смысл в том, что есть сотни тысяч текстовых файлов у которых в самом начале есть искомая информация. у всех файлов есть одно и то же ключевое слово, после которого поиск в файле должен остановиться и продолжиться уже в следующем файле.



Последнее исправление: man8531 (всего исправлений: 1)
Ответ на: комментарий от anonymous

это немного не то. искомое слово и ключевое - два разных слова. ищу в файлах слово «вася», а искать нужно до слова «ключевое»

man8531
() автор топика
Ответ на: комментарий от man8531

Это две разные задачи (которые можно последовательно соединить через пайп): обрезать и искать в «обрезке». Обрезать можно, например, sed'ом, в обрезке искать grep'ом. Или даже можно всё в sed сделать. Можно в awk, можно в perl. В общем, задачу одним grep'ом не решить, потому что задача составная.

anonymous
()
Ответ на: комментарий от anonymous

Обрезать можно, например, sed'ом, в обрезке искать grep'ом. Или даже можно всё в sed сделать.

sed разве не построчно работает?

anonymous
()
Ответ на: комментарий от legolegs

Если ТСу важно быстродействие, стоит попробовать mawk

annulen ★★★★★
()
Ответ на: комментарий от anonymous

а есть желающий написать пример на perl? кратко: найти в каталоге «каталог» все файлы с искомым словом «вася» и искать только до ключевого слова «ключевое», а все найденные файлы скопировать из «каталог» в папку «найденные»

man8531
() автор топика
Ответ на: комментарий от man8531

есть желающий написать пример на perl

Так вроде бы ты и есть желающий. Или тебе не надо?

no-such-file ★★★★★
()
Ответ на: комментарий от legolegs

спасибо, как одно из решений

no-such-file

Так вроде бы ты и есть желающий. Или тебе не надо?

по делу есть сказать что или поговорить не с кем?

man8531
() автор топика
Ответ на: комментарий от man8531

а есть желающий написать пример на perl?

Сколько денег?

anonymous
()

если не попадутся умельцы в perl, то подскажите как перенаправить вывод данных скрипта awk на cp?

find /home/man8531/txt/test/ -iname "*.txt" -print0 | xargs -0 awk -f sear.awk

содержимое sear.awk

/вася/ { print FILENAME }
/ключевоеслово/ { nextfile }
на дисплей выводит список, а вот как завернуть на копирование в указанный каталог - вопрос. такая комбинация не проходит
find /home/man8531/txt/test/ -iname "*.txt" -print0 | xargs -0 awk -f sear.awk | xargs cp -t /home/man8531/txt/search/

man8531
() автор топика
Ответ на: комментарий от anonymous
find /home/man8531/txt/test/ -iname "*.txt" -print0 | xargs -0 awk -f sear.awk | xargs -d '\n' cp -t /home/man8531/txt/search/

всё верно, загвоздка была, в итоге, в переводе строки. спасибо всем откликнувшимся! awk оказалось достаточно по скорости обработки: 250гб текста отрабатывает минут за 10. страшно подумать с какой скоростью отработает perl...

man8531
() автор топика
Ответ на: комментарий от anonymous

Добавь многопоточности.

Только если ссд, или тмпфс.

anonymous
()
Ответ на: комментарий от legolegs

а нельзя обойтись без файла-скрипта .awk? т.е. искомое слово и ключевоеслово сразу набирались в строке bash что-то вроде этого:

find /home/man8531/txt/test/ -iname "*.txt" -print0 | xargs -0 awk /вася/ { printf ("%s\0", FILENAME);nextfile; } & /ключевоеслово/ { nextfile; } | xargs -0 cp -t /home/man8531/txt/search/

man8531
() автор топика
Ответ на: комментарий от legolegs

как жеж всё просто оказалось, ну никакой интриги! :)

man8531
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.