带有许多特殊字符的Sed命令

时间:2013-04-10 09:38:30

标签: sed special-characters

我正在努力使用sed命令将具有许多特殊字符的字符串替换为另一个具有更多特殊字符的字符。

我有3个.sh文件,我需要替换以下内容:

要替换的文字:

SERVER=`grep ^SERVER= file.properties | tail -1 | awk 'BEGIN { FS="="} { print $2 }'`

替换为以下内容:

SERVER=`grep ^SERVER_UI= poller.properties | tail -1 | awk 'BEGIN { FS="="} { print $2 }'`
echo "New SERVER_UI value is ${SERVER}"
if [ "$SERVER" == "" ]
then
    SERVER=`grep ^SERVER= poller.properties | tail -1 | awk 'BEGIN { FS="="} { print $2 }'`
    echo "Old SERVER value is ${SERVER}"
fi

这是我自己能够得到的,但它没有用,我会很感激一些帮助:

sed -i.bak 's,SERVER=`grep ^SERVER= file.properties | tail -1 | awk \'BEGIN { FS="="} { print $2 }\'`,SERVER=`grep ^SERVER_UI= file.properties | tail -1 | awk \'BEGIN { FS="="} { print $2 }\'`\necho "New SERVER_UI value is ${SERVER}"\nif [ "$SERVER" == "" ]\nthen\n    SERVER=`grep ^SERVER= file.properties | tail -1 | awk \'BEGIN { FS="="} { print $2 }\'`\n    echo "Old SERVER value is ${SERVER}"\nfi,' script.sh

如果帮助也附带了一些解释,我们将非常感激。

2 个答案:

答案 0 :(得分:2)

首先,你有很多链接在一起的命令,你可以在单个awk命令中轻松完成。所以而不是:

grep ^SERVER_UI= poller.properties | tail -1 | awk 'BEGIN { FS="="} { print $2 }'

您可以使用此awk命令:

awk -F= '$1=="SERVER_UI"{val=$2} END{print val}' poller.properties

现在,一旦解决了这个问题,您应该在PATH中创建一个新的脚本文件subscript.sh,并使用以下命令(从命令中增强):

#!/bin/bash  
SERVER=$(awk -F= '$1=="SERVER_UI"{val=$2} END{print val}' poller.properties)
echo "New SERVER_UI value is ${SERVER}"
if [ "$SERVER" == "" ]
then
   SERVER=$(awk -F= '$1=="SERVER"{val=$2} END{print val}' poller.properties)
   echo "Old SERVER value is ${SERVER}"
fi

最后运行sed命令,用新的subsscript.sh调用替换旧命令:

sed -i.bak 's#SERVER=`grep ^SERVER= file.properties | tail -1 | awk '"'"'BEGIN { FS="="} { print $2 }'"'"'`#subscript.sh#' script.sh

答案 1 :(得分:0)

我想我明白了:

sed -i.bak 's,SERVER=`grep ^SERVER= file.properties | tail -1 | awk '"'"'BEGIN { FS=\"=\"} 
{ print $2 }'"'"'`,SERVER=`grep ^SERVER_UI= file.properties | tail -1 | awk '"'"'BEGIN 
{ FS=\"=\"} { print $2 }\'"'"'`\necho \"New SERVER_UI value is ${SERVER}\"\nif [ \"
$SERVER\" == \"\" ]\nthen\n    SERVER=`grep ^SERVER= file.properties | tail -1 | awk 
'"'"'BEGIN { FS=\"=\"} { print $2 }'"'"'`\n    echo \"Old SERVER value is ${SERVER}\"
\nfi,' script.sh

我必须使用 \“

来逃避所有 双引号

所有 单引号 '“'”'(单引号双引号单引号双引号单引号)

以及所有 换行 \ n