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

получить текст между ключевыми словами в файле журнала

Если у меня есть файл журнала, и я хочу выгрузить только текст между 1234 и 9876 в другой файл, как я могу это легко сделать?

Если у меня есть такой текстовый файл:

idsfsvcvs sdf sdf e e  sd vs d s g sg  s vc  d

slkdfnls 1234 keep me text 9876 das a g w eg dsf sd fsdf
sdfs fs dfsdf
sdfsdf sdf
sdf s fs
dfsf ds

Я хочу сделать что-то подобное

$ getinfo "1234" "9876" журнал

журнал $ cat

оставь мне текст

Одна строка sed может сделать это за вас:

sed -n 's/.*1234 \(.*\)9876.*/\1/p' textfile.txt > log

обычно это можно сделать с помощью grep и параметра -o.

-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line. 

так что это будет что-то вроде:

 grep -Po '1234.*9876' >> log

Не уверен на 100% в регулярном выражении, кстати, я его не тестировал

Это зависит от содержимого вашего файла. Вы можете начать с чего-нибудь простого, например:

$ grep 1234 logfile | grep 9876 | cut -d ' ' -f 3,4,5

Это работает для предоставленного примера. При необходимости вы можете поработать над ним, чтобы охватить другие форматы данных. Вы также можете перенаправить вывод в файл, добавив > /path/to/output

Как бы то ни было, я бы сделал следующее:

  1. grep 1234.*9876 > myfile
  2. vim myfile
  3. :%s/^.*1234// (удалить все до 1234)
  4. :%s/9876.*$// (удалите все после 9876 включительно)

Не идеально или не лучшим образом, но легко запомнить, если вы часто используете vim.