Если у меня есть файл журнала, и я хочу выгрузить только текст между 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
Как бы то ни было, я бы сделал следующее:
grep 1234.*9876 > myfile
vim myfile
:%s/^.*1234//
(удалить все до 1234):%s/9876.*$//
(удалите все после 9876 включительно)Не идеально или не лучшим образом, но легко запомнить, если вы часто используете vim.