Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex SHELL-SED替换“之间的文本”&引用;_Regex_Shell_Sed - Fatal编程技术网

Regex SHELL-SED替换“之间的文本”&引用;

Regex SHELL-SED替换“之间的文本”&引用;,regex,shell,sed,Regex,Shell,Sed,我是壳牌公司的新员工,一般来说是SED。我正在尝试替换文件中的文本。此文本介于“”之间,我正在努力创建命令 该文件有如下内容: 下载\u amule\u tcp\u port=“42450” 我的代码: TCPPort=44444 sed -i 's/^download_amule_tcp_port=\".*/download_amule_tcp_port=\"$TCPPort\"/' settings.conf 它不起作用 download_amule_tcp_port=$TCPPort"

我是壳牌公司的新员工,一般来说是SED。我正在尝试替换文件中的文本。此文本介于“”之间,我正在努力创建命令

该文件有如下内容: 下载\u amule\u tcp\u port=“42450”

我的代码:

TCPPort=44444

sed -i 's/^download_amule_tcp_port=\".*/download_amule_tcp_port=\"$TCPPort\"/' settings.conf
它不起作用

download_amule_tcp_port=$TCPPort"
谢谢你的帮助


M

==编辑===注释中的正确语法应为:

TCPPort="44444"

sed -i "s/^download_amule_tcp_port=.*/download_amule_tcp_port=\"$TCPPo
rt\"/" settings.conf

这会奏效的。谢谢

问题在于单引号,它阻止变量$TCPPort在本例中扩展为“44444”

下面的代码应该可以工作

TCPPort="44444"
sed -i 's/^download_amule_tcp_port=".*/download_amule_tcp_port="'"$TCPPort"'"/g' settings.conf

使用双引号而不是单引号,并转义内部双引号:

sed -i "s/^download_amule_tcp_port=\".*/download_amule_tcp_port=\"$TCPPORT\"/" settings.conf

顺便说一句,您设置变量
TCPPort
而不是
TCPPort

变量不在单引号之间展开,请尝试使用双引号。测试
echo“$TCPPort”
vs
echo“$TCPPort”
谢谢。我对问题进行了编辑以提供正确的语法。可能的重复在引用的文本中是否有换行符?看起来不错,您应该将自己的答案标记为正确的:)