2014-09-26 50 views
0

我有我想用一个bash脚本编辑一些配置文件(和脚本)编辑配置文件:如何用SED

. 
. 
. 
# ... foo ... 
foo 
. 
. 
. 

我用这个:

sed -i 's/foo/bar/' 

但按预期也会在评论行中编辑foo,我该如何防止?

+0

'的sed -i“/^*#/! s/foo/bar /''?它确保注释行总是以'#'开始,没有前导空格,你可以在'#'之前放置'*' – anishsane 2014-09-26 12:29:50

+0

@anishsane为什么不把它作为答案发布? – 2014-09-26 12:32:28

回答

4

这应做到:

sed -i '/^ *#/! s/foo/bar/' filename 

解释(除了原来的sed命令):

  1. s命令可以采取addresses
  2. /^ *#/暗示任何以*#开头的行
  3. !之后的地址取消其效果。

因此,所有不以*#开头的行都会受到影响。

1

另一种解决方案:

sed -i 's/\[^#\]foo/bar/g' filename 
2

您可以使用此也

sed '/^[^#]/s/foo/bar/g' file_name