1

多くの特殊文字を含む文字列をさらに多くの特殊文字を含む別の文字列に置き換える 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

ヘルプにも説明があれば、それは大歓迎です。

4

2 に答える 2

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

これで解決したらsubscript.sh、次のコマンドを使用して PATH に新しいスクリプト ファイルを作成する必要があります (コマンドを拡張したもの)。

#!/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
于 2013-04-10T10:11:17.073 に答える
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

于 2013-04-10T10:09:39.373 に答える