簡體   English   中英

SED在比賽之間更改文本而不會影響比賽

[英]SED change text between matches without affecting the matches

我有一些文字

#MATCH1
command 1
command 2
command 3
#MATCH2

sed -i '/MATCH1/,/MATCH2/' s/^/#/' <filename>

是否

##MATCH1
#command 1
#command 2
#command 3
##MATCH2

我想要的是

#MATCH1
#command 1
#command 2
#command 3
#MATCH2

有人知道如何執行此操作嗎? 無需后處理輸出

謝謝

您可以使用此sed來確保在行首沒有#號:

sed '/MATCH1/,/MATCH2/ s/^[^#]/#&/' file

#MATCH1
#command 1
#command 2
#command 3
#MATCH2

請注意,這僅匹配給定關鍵字之間的非空行。 或者,您可以使用此sed

sed '/MATCH1/,/MATCH2/ { /^#/! s/^/#/; }' file

sed是用於s / old / new,僅此而已。 對於其他任何事情,您都應該使用awk:

$ awk '/MATCH2/{f=0} f{$0="#" $0} /MATCH1/{f=1} 1' file
#MATCH1
#command 1
#command 2
#command 3
#MATCH2

在任何UNIX盒子上的任何shell中使用任何awk都可以使用,並且在/當您要執行其他任何操作時完全可以輕松修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM