sed 命令替换配置文件中的值

sed 命令替换配置文件中的值

我正在使用这个命令:

sed -i  's/\(^TestT_STOA_TS1901=\).*/\1N/'/app/test/must/untuio.cf

我收到了这个错误:

XXXXXXXXX:/app/test/must>sed -i  's/\(^TestT_STOA_TS1901=\).*/\1N/'/app/test/must/untuio.cf
sed: -e expression #1, char 33: unknown option to `s'

为什么会发生这种情况?如何替换配置文件中的值?

答案1

使用sed

sed -i 's/\(^Key2=\).*/\1Value4/' file

-i标志激活sed就地编辑。它搜索以 开头的行Key2=,并用键 ( \1) 和后跟新值替换该行Value4

编辑

如果在 中使用了斜线或其他命令字符sed,则必须对其进行转义:

sed -i 's/\(^Key2=\).*/\1long\/value\'/with\$many\"strange\^characters/' /path/to/file

编辑2:就你的情况而言:

sed -i  's/\(^TestT_STOA_TS1901=\).*/\1N/' /app/test/must/untuio.cf

答案2

有几种方法:

  1. 可能是最直接的方法,匹配适当的键,然后/Key2/替换Value2Value4

    $ sed '/Key2/ s/Value2/Value4/' foo.txt 
    Key1=Value1            
    Key2=Value4          
    Key3=Value3
    
  2. 如果您知道数字最后会出现,并且您只是想用其他数字替换这些数字(此处替换24):

    $ sed '/Key2/ s/[[:digit:]]\+$/4/' foo.txt 
    Key1=Value1
    Key2=Value4
    Key3=Value3
    

我还想到了一些其他方法,但这取决于您的使用情况。如果这些方法足够,请告诉我们。

您的错误在于sed -i -e '/KEY=/ s/= .*/= new_value/' /path/to/file

  • 按照你的例子,不会Key与匹配,/KEY=/因为它不是在适当的情况下,并且后面有一个数字Key,并且=后面是

  • s/= .*/= new_value/,从您的示例来看,后面没有空格,=但您的模式替换似乎在实际文件中有一个空格。否则,就您给出的示例而言,后面没有空格=

答案3

使用awk=)

awk -F= '$1=="Key2" {printf "%s=%s\n",$1,"Value4"; next}1' your_input_file

例子

输入文件foo

cat foo

Key1=Value1            
Key2=Value2          
Key3=Value3

命令输出

% awk -F= ' $1=="Key2" {printf "%s=%s\n",$1,"Value4"; next}1' foo
Key1=Value1            
Key2=Value4
Key3=Value3

相关内容