sed属性替换

sed属性替换,sed,Sed,我有一个属性文件,我想在其中进行属性替换,所以我编写了一个sed模式来进行更改 host = 1234 使用另一个值,但当我执行 echo "host = 1234" | sed 's/\#*\(host[ \t]*\)\=\([ \t]\d*\)/\1\=\1/g' 我知道替换已经完成(host=host),但是\2原子也被追加到字符串的末尾(1234)。我怎样才能删除它 `host =host 1234 第一个问题是\d没有按您的想法执行。至少使用[0-9] 你仍然会得到host=h

我有一个属性文件,我想在其中进行属性替换,所以我编写了一个sed模式来进行更改

host = 1234
使用另一个值,但当我执行

echo "host = 1234" | sed 's/\#*\(host[ \t]*\)\=\([ \t]\d*\)/\1\=\1/g'
我知道替换已经完成(host=host),但是\2原子也被追加到字符串的末尾(1234)。我怎样才能删除它

 `host =host 1234

第一个问题是
\d
没有按您的想法执行。至少使用
[0-9]

你仍然会得到
host=host
,这在我看来很疯狂

编辑:

好的

  • 如果“主机”总是相同的,为什么要捕获它?重写一下
  • 为什么要保留确切的选项卡/空间信息?重写一下
  • 为什么要逃避那些不特别的事情呢
我希望你能明白

但以下是您可能想要的:

sed '/^#/!s/[ \t]*\([^ \t]*\)[ \t]*=[ \t]*\([^ \t]*\)/\1 = newvalue/g' input_file
这将把
input_file
的非注释行中的
anything=anything
更改为
anything=newvalue
。要使其成为由
newvalue
替换的特定键,请使用:

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

例如,仅替换读取
host=anything

的行这是否符合您的需要

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

host
那么

屈服

1234

它正在做你让它做的事情。你想让它做什么?请给出示例输入行和所需的输出行。我想将host=更改为host=,例如可以是\1或计算的。在上面的示例中,newvalue变为\1,剩余的line@fluca1978:如果这回答了您的问题并解决了您的问题,请接受答案。
echo "host = 1234" | cut -d"=" -f 1 
1234