我使用下面的代码替换shell脚本中的字符串.
echo $LINE | sed -e 's/12345678/"$replace"/g'
Run Code Online (Sandbox Code Playgroud)
但它正在被替换$replace而不是该变量的值.
谁有人说出了什么问题?
pax*_*blo 127
如果要解释$replace,则不应使用单引号,因为它们会阻止变量替换.
尝试:
echo $LINE | sed -e "s/12345678/\"${replace}\"/g"
Run Code Online (Sandbox Code Playgroud)
假设你想要输入报价.如果你不想要报价,请使用:
echo $LINE | sed -e "s/12345678/${replace}/g"
Run Code Online (Sandbox Code Playgroud)
成绩单:
pax> export replace=987654321
pax> echo X123456789X | sed "s/123456789/${replace}/"
X987654321X
pax> _
Run Code Online (Sandbox Code Playgroud)
请注意确保${replace}没有任何重要的字符sed(/例如),因为除非转义,否则会引起混淆.但是,正如你所说,如果你用一个数字替换另一个数字,这应该不是问题.
gho*_*g74 67
你可以使用shell(bash/ksh).
$ var="12345678abc"
$ replace="test"
$ echo ${var//12345678/$replace}
testabc
Run Code Online (Sandbox Code Playgroud)
bob*_*bob 19
这个问题并不是特定的,但是对于那些需要扩展相同功能的人来说,以前的答案是清晰的:
# create some variables
str="someFileName.foo"
find=".foo"
replace=".bar"
# notice the the str isn't prefixed with $
# this is just how this feature works :/
result=${str//$find/$replace}
echo $result
# result is: someFileName.bar
str="someFileName.sally"
find=".foo"
replace=".bar"
result=${str//$find/$replace}
echo $result
# result is: someFileName.sally because ".foo" was not found
Run Code Online (Sandbox Code Playgroud)
让我举两个例子。
#!/bin/bash
LINE="12345678HI"
replace="Hello"
echo $LINE | sed -e "s/12345678/$replace/g"
Run Code Online (Sandbox Code Playgroud)
LINE="12345678HI"
str_to_replace="12345678"
replace_str="Hello"
result=${str//$str_to_replace/$replace_str}
echo $result
Run Code Online (Sandbox Code Playgroud)
希望您会发现它有帮助!
单引号非常强大.进入内部后,在离开之前,您无法调用变量替换.改为使用双引号:
echo $LINE | sed -e "s/12345678/$replace/g"
Run Code Online (Sandbox Code Playgroud)
echo $LINE | sed -e 's/12345678/'$replace'/g'
Run Code Online (Sandbox Code Playgroud)
您仍然可以使用单引号,但是当您希望变量在正确的位置展开时,您必须“打开”它们。否则字符串是“字面上的”(正如@paxdiablo 正确说明的那样,他的答案也是正确的)