1

У меня довольно большой XML-файл без переносов строк.

Он настолько большой, что его медленно открывать и использовать в Emacs или другом текстовом редакторе. Но я просто хочу извлечь его короткую часть между двумя известными подстроками.

Меня не волнует сохранение структуры XML, я просто хочу кусок символов.

Это должно быть однострочно в седе, нет?

есть идеи как это сделать? Я попытался адаптировать https://stackoverflow.com/questions/13242469/how-to-use-sed-grep-to-extract-text-between-two-words, но, кажется, он не работает, когда я передаю свой файл в канал Это. (Это работает на примерах игрушек, но я думаю, что мой файл может быть слишком большим.)

2 ответа2

2

С GNU grep:

С frompattern и topattern на выходе:

grep -o 'frompattern.*topattern' file.xml

Без frompattern и topattern в выходных данных:

grep -Po 'frompattern\K.*(?=topattern)' file.xml
1

Ну, обычно это легко сделать с помощью sed. Но это всегда легко сделать с помощью awk:

awk '/frompattern/,/topattern/' your.xml > chunk.xml

Здесь два шаблона являются регулярными выражениями (как в случае с sed). Если вас это не устраивает по какой-либо причине, вы можете использовать простые строки, если знаете, где они находятся:

awk '$x=="fromstring",$y=="tostring"' your.xml > chunk.xml

Здесь x и y - это положения полей строк, которые вы хотите использовать в качестве барьерных знаков. (Больше можно сделать с небольшим усилием.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .