我从this中找到了该命令,该命令无需任何命令替换即可工作。但是,如果我尝试在命令中替换变量,则会遇到以下问题。
注意:我正在使用sed命令(BSD OSX)/ MacOS
要复制,只需使用以下命令创建一个file.txt:
SOME_TEXT
CHANGE_THIS
CHANGE_THIS
CHANGE_THIS
在终端中添加TMP变量:
TMP=export PATH=/Users/Name/with pace/and_variables:$PATH
现在使用此命令:
sed -i '' "1h; 1 $ { x; s/CHANGE_THIS/$TMP/; p; }" file.txt
我收到此错误:
sed: 1: "1h; 1 $ { x; s/CHANGE_T ...": invalid command code $
在一个秘密的答案中,我得到了这个(“,”加到“ 1,$”:
sed -i '' "1h; 1,$ { x; s/CHANGE_THIS/$TMP/; p; }" file.txt
预期的输出file.txt
SOME_TEXT
export PATH=/Users/Name/with pace/and_variables:$PATH
CHANGE_THIS
CHANGE_THIS
我明白了:
SOME_TEXT
SOME_TEXT
SOME_TEXT
SOME_TEXT
答案 0 :(得分:1)
使用:
sed -i '0,/.*CHANGE_THIS.*/s//my changed line/' file
答案 1 :(得分:0)
如果您对awk
没问题,请尝试遵循。
##Creating shell variable named TM here.
TMP="export PATH=/Users/Name/with pace/and_variables:$PATH"
awk -v tmp="$TMP" '/CHANGE_THIS/ && ++flag==1{$0=tmp} 1' Input_file
如果您要将输出保存到Input_file本身,则也可以在上面的代码中附加> temp_file && mv temp_file Input_file
。
也在此处为上述代码添加说明。
awk -v tmp="$TMP" ' ##Creating an awk variable named tmp whose value is bash variable TMP value.
/CHANGE_THIS/ && ++flag==1{ ##Checking condition if a line is having string CHANGE_THIS and variable flag value is 1 then do following.
$0=tmp ##Setting current line value to value of tmp awk variable here.
} ##Closing the block for condition here.
1 ##By mentioning 1 printing edited/non-edited line here.
' Input_file ##Mentioning Input_file name here.