如何覆盖两个特定模式之间的文本?

如何覆盖两个特定模式之间的文本?

我有多行看起来像这样:

##1##
text
##z##
##2##
text
##z##
...etc

基本上,虽然我已经知道如何获取 ##digit## 行和第一次出现的 ##z## 之间的文本,但我不确定如何覆盖中间的内容(实际的文本)是)。

我并不是试图替换text上述示例/文件的每个部分,而是仅替换我指定的起始点(例如:##99##)和结束点(##z##)之间的内容。

我不能/不想用text我想要覆盖它的文本替换该部分(例如: sed 's/oldtext/newtext/g'),主要是因为:

  • 文本部分可以是所述文件的其他中间部分的一部分,并且专门更改文本,而不是两个特定行/图案之间的内容则不会。

我如何使用 Unix/本地 Linux 工具来做到这一点? (dd、sed 等)

答案1

给定一个名为 file.txt 的文件及其内容

##1##
text
##z##
##2##
text
asdf
more text
##z##
...etc

目前还不清楚你想要什么,我认为是以下内容:

命令

cat file.txt | sed -n '/##2##/!{p;d};p;:cycle n;/##z##/!{H;bcycle};{x;s/.*/my awesome replacement/p;x;p}'

产生输出:

##1##
text
##z##
##2##
my awesome replacement
##z##
...etc

那是你要的吗?

相关内容