¿如何使用RegExp获取两个标签之间的所有文本,然后用另一个文本替换整个块?

时间:2018-07-02 07:08:30

标签: unix sed sh

我有一个包含多行的日志文件作为示例。

日志文件中的一个示例可能是:

-BEG DET
-SOME TEXT RANDOM REFERING TO REG DET
-SOME TEXT RANDOM REFERING TO REG DET
-SOME TEXT RANDOM REFERING TO REG DET
-END DET

所需的输出应为:

BEG DET OMITTED

话虽如此,我需要将标签“ -BEG DET”和“ -END DET”中的所有文本替换为无引号,并用一个唯一的替换所有块,包括所提及的标签。行:BEG DET OGETTED。

请注意,标签之间的行数是可变的。

谢谢。

2 个答案:

答案 0 :(得分:2)

$ cat file
foo
-BEG DET
-SOME TEXT RANDOM REFERING TO REG DET
-SOME TEXT RANDOM REFERING TO REG DET
-SOME TEXT RANDOM REFERING TO REG DET
-END DET
bar

$ awk '/-BEG DET/{print $0, "OMITTED"; f=1} !f{print} /-END DET/{f=0}' file
foo
-BEG DET OMITTED
bar

答案 1 :(得分:1)

使用sed的一种方法:

sed  -e '/^-BEG/!b' -e ':a' -e'N;/\n-END/!ba' -e 's/\n.*/ OMITTED/;s/-//' filename