Попробуйте это:
sudo apt --fix-broken install
sudo apt-get update
sudo apt-get upgrade
Использование Raku (, ранее известного как Perl _6)
raku -ne '.put unless /keyword1/ ^fff^ /keyword2/;'
Пример ввода:
bla bla
...
bla bla
keyword1
bla bla
...
bla bla
keyword2
bla bla
...
bla bla
Пример вывода:
bla bla
...
bla bla
keyword1
keyword2
bla bla
...
bla bla
Вкратце, флаги командной строки Raku -ne
говорят Raku выполнять код без автопечати. Печать выполняется с помощью первой инструкции.put
(«печать -с использованием терминатора -», то есть новой строки ). Точка .
, предшествующая put
, является сокращением от $_.put
, где $_
представляет в данном случае переменную темы (, содержащую данные из строки ввода ).
Инструкция fff
— это оператор Раку sed -, аналогичный оператору «флип -флоп», который включает/выключает на основе двух окружающих регулярных выражений. В Raku (и Perl5 )unless
является псевдонимом if not
. Наконец, ^
символы вставки, окружающие fff
, дают ^fff^
указание Raku исключить конечные точки.
Поскольку unless
является отрицанием, ^fff^
отменяет исключение конечных точек, что сохраняет keyword1
и keyword2
в выходных данных. Использование fff
вместо ^fff^
удаляет keyword1
и keyword2
из вывода.
(Обратите внимание: если вы действительно хотите разобрать файл XML
, то одно решение Raku -лайнера можно создать с помощью модуля Raku XML
).
https://unix.stackexchange.com/search?q=Raku+%5BXML%5D
https://github.com/raku-community-modules/XML
https://raku.org
Предыдущее предложение относительно sed не даст ожидаемых результатов, если «ключевое слово» не является единственным словом в строке. Если вы хотите извлечь текст между любыми двумя словами из любого абзаца, независимо от их положения, вам понадобится Perl, в частности Perl's File Slurp
Например, допустим, у нас есть этот текст:
Sir Arthur Conan Doyle was born on May 22, 1859, in Edinburgh.
He studied medicine at the University of Edinburgh and began to write stories while he was a student.
Over his life he produced more than 30 books, 150 short stories, poems, plays, and essays across a wide range
of genres.
His most famous creation is the detective Sherlock Holmes, who he introduced in his first novel, A Study in Scarlet (1887).
This was followed in 1889 by an historical novel, Micah Clarke.
Мои ключевые слова здесь — «медицина» и «Холмс» соответственно.
Результаты с sed удалит ровно первую и последнюю строки из абзаца. В то время как ожидаемый результат должен также удалить часть предложения, которая находится до и включая medicine
, плюс после и включая Holmes
.
Давайте попробуем Perl's File Slurp:
perl -0777 -i -pe 'push @a,/medicine(.*?)Holmes/s;END{print "@a"}' myparagraph.txt
Выход:
at the University of Edinburgh and began to write stories while he was a student.
Over his life he produced more than 30 books, 150 short stories, poems, plays, and essays across a wide range
of genres.
His most famous creation is the detective Sherlock