Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
Bash 强制sed在目标文件中仅替换匹配行一次_Bash_Shell_Sed_Replace - Fatal编程技术网

Bash 强制sed在目标文件中仅替换匹配行一次

Bash 强制sed在目标文件中仅替换匹配行一次,bash,shell,sed,replace,Bash,Shell,Sed,Replace,我使用以下脚本替换PHP INI配置文件中指定的键值对: iniConfigs='memory_limit=3G short_open_tag=On post_max_size=512M max_input_time=3600 max_execution_time=21600 upload_max_filesize=128M extension_dir="C:\\PHPs\\PHP7032\\ext"' while IFS= read -r line do key=$(awk -F\=

我使用以下脚本替换PHP INI配置文件中指定的键值对:

iniConfigs='memory_limit=3G
short_open_tag=On
post_max_size=512M
max_input_time=3600
max_execution_time=21600
upload_max_filesize=128M
extension_dir="C:\\PHPs\\PHP7032\\ext"'

while IFS= read -r line
do
    key=$(awk -F\= '{print $1}' <<< $line)
    sed -i "s/^\($key\).*/\1 ${line}/" php.ini
done <<< "$iniConfigs"
而不是

short_open_tag=On
...
max_execution_time=21600

为什么
sed
没有完全按照预期替换字符串?

替换模式中有
\1
。您不需要它,因为
$line
已经有了密钥。这将有助于:

while IFS= read -r line
do
    key=$(awk -F\= '{print $1}' <<< $line)
    sed -i "s/^$key.*/$line/" php.ini
done <<< "$iniConfigs"
当IFS=read-r行时
做
key=$(awk-F\='{print$1}'
while IFS= read -r line
do
    key=$(awk -F\= '{print $1}' <<< $line)
    sed -i "s/^$key.*/$line/" php.ini
done <<< "$iniConfigs"