Содержимое моего filename
файла выглядит следующим образом (например):
My block of line starts from here
START
First line
second line
third line
END
and end to here for example.
Я хочу заменить блок строк между START
и END
одним словом, например, на SINGLEWORD
. Как ниже:
My block of line starts from here
SINGLEWORD
and end to here for example.
Я могу найти свой блок строк с помощью этой команды:
grep -Pzo "START(.|\n)*END" filename
И результат выполнения вышеуказанной команды будет таким:
START
First line
second line
third line
END
Затем я использовал эту команду, чтобы объединить все строки в одну строку:
LAST_RESULT | sed -e :a -e '/$/N; s/\n/ /; ta'
Тогда я получу этот результат:
START First line second line third line END
И с моей последней командой LAST_RESULTS | sed 's/.*/SINGLEWORD/'
я меняю их "SINGLEWORD"
и получаю этот результат.
SINGLEWORD
Теперь то, что я хочу: как я могу использовать эту команду (или вашу команду предложения) и заменить (вместо) мой блок строк словом «SINGLEWORD»? И конечный результат будет таким:
My block of line starts from here
SINGLEWORD
and end to here for example.
источник
sed
должно быть возможным, но, вероятно, труднее для чтения (посмотрите на этот вопрос )/
,*
,?
) в нем , и это просто пример. и не могли бы вы объяснить свою команду.sed
):\/
,\*
,\?
perl -i -p0e 's/\/\*.*?\*\//SINGLEWORD/sm'
. Это должно сработатьМне было интересно , если это возможно без
perl
,python
и другие. И я нашел это решение, используяsed
:Объяснение:
/START.*END/
поSINGLEWORD
, / г глобального матча (столько раз , сколько это возможно)Это было найдено здесь .
@KasiyA, спасибо, я узнал много интересного!
источник