Как удалить все строки до и после определенных строк в файле?

Я играл с Powergrep и регулярными выражениями, но я не знаю, как это сделать:

У меня есть текстовый файл (исходный код веб-страницы), и я хочу удалить весь текст (много строк) перед конкретной строкой в ​​коде: STRING1 (html tag), а также весь текст после другой конкретной строки: STRING2. Эти строки появляются только один раз в исходном коде.

2
задан 31 March 2015 в 14:15

2 ответа

Можно сделать это с этой командой:

sed -e '/STRING1/,/STRING2/!d' inputfile > outputfile
0
ответ дан 31 March 2015 в 14:15

Откройте Terminal путем нажатия Ctrl+Alt+T и используйте тот ниже одной линейной команды. Не забывайте изменять входное имя файла на Ваш.

Используя :

awk -v FS="(STRING1|STRING2)" '{print $2}' inputfile > outputfile

Используя :

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

В человеке grep:

-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 для разработчиков

2
ответ дан 31 March 2015 в 14:15

Другие вопросы по тегам:

Похожие вопросы: