我有多行看起来像这样:
##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
那是你要的吗?