2012-02-27 51 views
0

我已经得到了我想要做一个财产替代属性文件,所以我写了一个sed图案改变桑达物业替代

host = 1234 

与另一个值,但是当我执行

echo "host = 1234" | sed 's/\#*\(host[ \t]*\)\=\([ \t]\d*\)/\1\=\1/g' 

我知道替换已完成(host = host),但\ 2原子也附加到字符串的末尾(1234)。我怎样才能删除它?

`host =host 1234 
+0

它做什么你告诉它做的事。你想要做什么?请提供样品输入线和所需的输出线。 – Sorpigal 2012-02-27 12:33:13

+0

我想要更改主机= 与主机= ,例如可以是\ 1或计算一个。在上面的例子中,newvalue变成了\ 1,其余的行 – fluca1978 2012-02-27 12:33:43

回答

2

第一个问题是\d不符合您的想法。至少使用[0-9]

你仍然得到host =host了,这对我来说似乎很疯狂。

编辑:

echo "host = 1234" | sed 's/#*\host[ \t]*=[ \t]*\([0-9]*\)/host = asdf/g' 
  • 为什么捕获 '主机',如果它总是一样的吗?只需重写它。
  • 为什么要保留准确的制表符/空间信息?只需重写它。
  • 为什么要逃避不特别的事情?

我希望你明白。

但在这里,你可能想要的东西:

sed '/^#/!s/[ \t]*\([^ \t]*\)[ \t]*=[ \t]*\([^ \t]*\)/\1 = newvalue/g' input_file 

这将在input_file非注释行更改anything = anythinganything = newvalue。使之成为特定键是由newvalue替换,可使用:

sed '/^#/!s/[ \t]*\(host\)[ \t]*=[ \t]*\([^ \t]*\)/\1 = newvalue/g' input_file 

到例如只替换读取host = anything的行。

+0

谢谢,那正是我想要的。 – fluca1978 2012-02-27 13:18:01

+0

@ fluca1978:如果这回答你的问题并解决你的问题,请接受答案。 – Sorpigal 2012-02-27 19:50:47

0

这是否适合您的需求?

echo "host = 1234" | cut -d"=" -f 1 

产生

host 

然后,

echo "host = 1234" | cut -d"=" -f 1 

产生

1234