Предложение: используйте инструменты, поддерживающие xml / html:
curl "$url" | xmllint -html -xpath '//span/strong[2]/text()' -
curl "$url" | xidel -s -e "//span/strong[2]" -
или даже
xidel -e "/span/strong[2]" $url
Вы можете сделать это:
cat test.txt | grep -A2 "pen test/ut" | sed "1 d"
The sixth line
The seventh line
С Perl:
perl -ni.bck -e '$i++,next if /^pen test/;print if $i' file
Это читает ваш входной файл и выполняет обновление в -месте. Исходный файл сохраняется с расширением суффикса .bck
.
При чтении каждой строки файла устанавливается флаг $i
, если строка начинается с pen test
и читается следующая строка. Когда $i
не равно нулю (истинное условие ), строки печатаются.
Если вы хотите извлечь интересующие строки, а не обновлять их, просто выполните:
perl -ne '$i++,next if /^pen test/;print if $i' file
Написав ответ с помощью сценария оболочки с использованием split и sed, я вспомнил команду оболочки csplit (context split ).
Я сохранил ваш текст выше в /tmp/del.me. Команда:
csplit del.me "/pen test/"
разбивает исходный файл на два файла, один с текстом до совпадения, другой с текстом, включающим и последующим.
host:tmp me$ cat xx01
pen test/ut
The sixth line
The seventh line
Если совпадение вам не нужно, вы можете добавить «+1» к аргументу совпадения, и совпадающий текст будет помещен в первый файл.
csplit del.me "/pen test/+1"
Итак, приведенная выше команда дает мне два выходных файла xx00 xx01. (Вы можете изменить имя файла. )xx01 содержит:
host:tmp me$ cat xx01
The sixth line
The seventh line
Для этого можно использовать утилиты sed
и Perl
следующим образом:
perl -ne '
next unless /pen/; # skip till we meet the first interesting record
print <>; # <> in the list context, fetches the entire remaining file
' input-file.txt
sed -ne '
/pen/!d
n
:loop
$!N;P;s/.*\n//
tloop
' input-file.txt
sed -ne '
/pen/!d ;# reject lines till we see the first interesting line
n ;# skip the first time we see the interesting line
:n ;# then setup a do-while loop which"ll do a print->next->print->... till eof
p;n ;# the looping ends when the n command tries to read past the last record
bn
' input-file.txt
С помощью GNU sed :удалите все до первого совпадения и измените файл в -месте:
sed -i '0,/pen test/d' test.txt