Я хочу взять текст между tok98 и 5678 и выгрузить его в файл.
если tok98 и 5678 были на одной линии, я могу использовать это
sed -n 's/.*\(tok98\)\(.*\)\(5678\).*/\2/p' testfile.txt > text.dmp
но когда токены расположены вертикально, он не работает, как я могу переписать этот sed, чтобы он работал здесь
$ cat testfile.txt
do with > 9
tok98
fdf df s df sd f sd v
dvsdv dvf sd vs vs dv sdfsd
2323 2323 232 {}
sfdf sd f s df s df sf
5678
no way = true + 50
$
Вы можете использовать / START /, / STOP / диапазоны шаблонов в sed
sed -n '/tok98/,/5678/p' file
/ START / и / STOP / тоже могут быть RE
sed -n '/^tok98/,/^5678/p' file
будет печатать между строками, начиная tok98
и 5678
и не будет запускаться или останавливаться, если строки не начинаются с этих строк.
Если вы хотите исключить / START / и / STOP /, это должно работать
sed -n '/^tok98/,/^5678/ {/^tok98/b;/^5678/b;p}' file
sed
по умолчанию не обрабатывает несколько строк, но это можно решить с помощью трюка вроде:
$ cat testfile.txt | tr '\n' ',' | sed -n 's/.*\(tok98\)\(.*\)\(5678\).*/\2/p' | tr ',' '\n' > text.dmp
Вам просто нужно преобразовать символы новой строки \n
какому-то другому персонажу, например ,
а затем конвертируйте их обратно в \ n, когда закончите с sed
. Вы должны убедиться, что во входном файле нет запятой.