替换文件

时间:2015-04-22 11:51:34

标签: shell sed pattern-matching

我想使用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但是它取代了所有出现次数。

2 个答案:

答案 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>