我正在使用这个命令:
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
有几种方法:
可能是最直接的方法,匹配适当的键,然后
/Key2/
替换Value2
为Value4
:$ sed '/Key2/ s/Value2/Value4/' foo.txt Key1=Value1 Key2=Value4 Key3=Value3
如果您知道数字最后会出现,并且您只是想用其他数字替换这些数字(此处替换
2
为4
):$ 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