财产替代

时间:2012-02-27 12:27:56

标签: sed

我有一个属性文件,我想要进行属性替换,所以我写了一个sed模式来改变

host = 1234

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

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

我得到了替换完成(host = host)但是\ 2原子也被附加到字符串的末尾(1234)。我该如何删除它?

 `host =host 1234

2 个答案:

答案 0 :(得分: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

这会在anything = anything的非评论行中将anything = newvalue更改为input_file。要使其成为由newvalue替换的特定键,请使用:

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

例如仅替换阅读host = anything的行。

答案 1 :(得分:0)

这是否符合您的需求?

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

产量

host

然后,

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

产量

1234