替换文本中的段落

use*_*261 1 bash awk sed

如何使用 shell 命令(sed 或 awk)来替换文件中的段落,如下所示:

bala bala ba1
balabala.
leave me here.

this paragraph
yes, I'm going
to be replaced

The rest contains
should not be replaced.
Run Code Online (Sandbox Code Playgroud)

更换后:

bala bala ba1
balaba.
leave me here.

New contains,
I'm replacement!

The rest contains
should not be replaced.
Run Code Online (Sandbox Code Playgroud)

我声明original包含在一个变量中$OLD,而new包含在另一个变量中$NEW。

Ben*_* W. 5

假设您有包含新段落和旧段落的变量,如

$ echo "$old"
this paragraph
yes, I'm going
to be replaced
Run Code Online (Sandbox Code Playgroud)

和

$ echo "$new"
New contains,
I'm replacement!
Run Code Online (Sandbox Code Playgroud)

您可以将该文件(假设它名为infile)读入 Bash 变量并使用参数扩展:

$ contents=$(< infile)
$ echo "${contents/$old/$new}"
bala bala ba1
balabala.
leave me here.

New contains,
I'm replacement!

The rest contains
should not be replaced.
Run Code Online (Sandbox Code Playgroud)

要就地更改文件:

echo "${contents/$old/$new}" > infile.tmp && mv infile.tmp infile
Run Code Online (Sandbox Code Playgroud)