我想使用sed
命令替换文件中指定范围内的值。
我们说我有一个文件:
[red]
rose,garden,tree
[green]
leaf,tree
[blue]
water,sea
我想要替换“树”'作为'植物'仅在[绿色]块中,以便输出如下:
[red]
rose,garden,tree
[green]
leaf,plant
[blue]
water,sea
我使用sed -i 's/tree/plant/g' file1.txt
但是它取代了所有出现次数。
答案 0 :(得分:1)
我会awk
为此:
$ awk '/^\[/ && f {f=0} /^\[green]/ {f=1} f{gsub("tree","plant")} 1' a
[red]
rose,garden,tree
[green]
leaf,plant
[blue]
water,sea
当你在[green]
区块内时,这会设置一个标记。
/^\[/ && f {f=0}
当出现以[
开头的新行时,请取消标记。/^\[green]/ {f=1}
如果阻止为[green]
,请设置标记。f{gsub("tree","plant")}
设置标志后,将所有tree
替换为plant
。1
按照awk
的默认行为打印该行。答案 1 :(得分:1)
这个sed命令只会在tree
块中出现plant
块时将[green]
替换为[green]
,该块是以字符串[...]
开头的块直到以$ sed '/^\[green\]/,/^\[[^]]*\]/ s/tree/plant/g' file
[red]
rose,garden,tree
[green]
leaf,plant
[blue]
water,sea
开头的行。
<asp:TextBox ID="TextBoxPassword" runat="server" TextMode="Password" autocomplete="off"></asp:TextBox>