Я играл с Powergrep и регулярными выражениями, но я не знаю, как это сделать:
У меня есть текстовый файл (исходный код веб-страницы), и я хочу удалить весь текст (много строк) перед конкретной строкой в коде: STRING1
(html tag), а также весь текст после другой конкретной строки: STRING2
. Эти строки появляются только один раз в исходном коде.
Можно сделать это с этой командой:
sed -e '/STRING1/,/STRING2/!d' inputfile > outputfile
Откройте Terminal путем нажатия Ctrl+Alt+T и используйте тот ниже одной линейной команды. Не забывайте изменять входное имя файла на Ваш.
Используя awk:
awk -v FS="(STRING1|STRING2)" '{print $2}' inputfile > outputfile
Используя grep:
grep -Pzo "(?<=STRING1)(.|\n)*(?=STRING2)" inputfile > outputfile
или с DOTALL (Точечные Разрывы строки Соответствий) модификатор. Это делает .
соответствовать даже \n
символы строки ew.
grep -Pzo "(?s)(?<=STRING1).*?(?=STRING2)" inputfile > outpuffile
(?s)
actives DOTALL для grep.
или как другая альтернатива соответствию \n
символы строки ew, просто используйте:
grep -Pzo "(?<=STRING1)[\s\S]*(?=STRING2)" inputfile > outpuffile
-o, --only-matching
Print only the matched (non-empty) parts of a matching line,
with each such part on a separate output line.
-P, --perl-regexp
Interpret PATTERN as a Perl compatible regular expression (PCRE)
-z, --null-data
Treat the input as a set of lines, each terminated by a zero byte (the ASCII
NUL character) instead of a newline. Like the -Z or --null option, this option
can be used with commands like sort -z to process arbitrary file names.
(?<=pattern)
: Известный как Положительный Lookbehind. Пара круглых скобок, с вводной круглой скобкой, сопровождаемой вопросительным знаком, "меньше, чем" символ, и равняются знаку.
Так, (?<=STRING1).*?
(положительный lookbehind), соответствует 0 или больше случаям любых символов (которые являются дополнительными из-за использования ?
после .*
) сопровождаемый STRING1
от inputfile.
(?=pattern)
: Известный как Положительное Предвидение: положительная предварительная конструкция является парой круглых скобок, с вводной круглой скобкой, сопровождаемой вопросительным знаком и, равняется знаку.
Так, .*?(?=STRING2)
: (положительное предвидение), соответствует 0 или больше случаям любых символов, сопровождаемых STRING2
.
Ссылки для чтения больше:
Усовершенствованные темы Grep
GREP для разработчиков