Scripting

如何覆蓋兩個特定模式之間的文本?

  • September 7, 2020

我有多行看起來像這樣:

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

基本上,雖然我已經知道如何獲取##digit## 行和第一次出現的##z## 之間的文本,但我不確定如何覆蓋中間的內容(實際文本是)。

我並不是要替換text上述範例/文件的每個部分,而只是替換我指定的起始點(例如:##99##)和結束點(##z##)之間的任何部分。

我不能/text不想用我想要覆蓋它的文本替換部分(例如:sed’s/oldtext/newtext/g’),主要是因為:

  • 文本部分可能是所述文件的其他中間部分的一部分,並且專門更改文本,而不是兩個特定行/模式之間的內容。

我如何使用 Unix/本地 linux 工具來做到這一點?(dd、sed 等)

給定一個名為 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

那是你要的嗎?

引用自:https://unix.stackexchange.com/questions/608351