Bash 强制sed在目标文件中仅替换匹配行一次
我使用以下脚本替换PHP INI配置文件中指定的键值对: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\=
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"