Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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
Linux 使用sed命令shell脚本替换包含空格的字符串_Linux_Bash_Shell_Sed_Sh - Fatal编程技术网

Linux 使用sed命令shell脚本替换包含空格的字符串

Linux 使用sed命令shell脚本替换包含空格的字符串,linux,bash,shell,sed,sh,Linux,Bash,Shell,Sed,Sh,我试图使用sed命令替换xml文件中的字符串。我的脚本包含以下代码 SEARCH='key="identifierA" value ="000000 00:00:00"' REPLACE='key="identifierA" value ="101617 00:00:00"' TEST_DIR=home/test/ TEST_FILE="test.xml" ChangeXml(){ ModifyValue $TEST_DIR $TEST_FILE $SEARCH $REPLACE }

我试图使用sed命令替换xml文件中的字符串。我的脚本包含以下代码

SEARCH='key="identifierA" value ="000000 00:00:00"'
REPLACE='key="identifierA" value ="101617 00:00:00"'

TEST_DIR=home/test/
TEST_FILE="test.xml"

ChangeXml(){

ModifyValue $TEST_DIR $TEST_FILE $SEARCH $REPLACE

}

ModifyValue (){
cd $1
echo "Search : $3 Replace : $4 "
sed -i "s/$3/$4/g" $2
}

#Actions performed

ChangeXml

但是回声中的这个#3返回identifera,而$4返回00000000:00:00。它应该给那些变量赋值。由于此原因,更换未按预期工作。试图避开key=“identifierA”value=“000000 00:00:00”之间的空格。但是没有得到结果。我对shell脚本非常陌生。有人能告诉我原因并纠正我以获得预期结果吗?

如果变量可以包含空格,请引用变量:

ModifyValue "$TEST_DIR" "$TEST_FILE" "$SEARCH" "$REPLACE"

否则,$SEARCH将分块发送(在空白处拆分),并填充多个参数。

Hi,它工作得很好。使用sed有更好的解决方案吗?你说的“更好”是什么意思?它工作得很好,怎么能工作得更完美呢?对不起。我的意思是我替换字符串的方式。