設定ファイルのいくつかの行を置き換えたり追加したりするbashスクリプトを開発しようとしています。私は、sedが置き換えられた行のスペースを尊重していないという問題を抱えています。Unix/Linux Bashスクリプティング:sedがスペースを尊重しない
sedkey="org.apache.catalina.core.ThreadLocalLeakPreventionListener"
sednew="<Listener\ className=\"org.apache.catalina.mbeans.JmxRemoteLifecycleListener\"\ rmiRegistryPortPlatform=\"7050\"\ rmiServerPortPlatform=\"7051\"\ \/\>"
sed -e "/"$sedkey"/a\\
"$sednew"" server-wc.xml
しかし、私はこれを含むスクリプトを実行すると、私はこれを取得:
sed: can't read className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"\: No such file or directory
sed: can't read rmiRegistryPortPlatform="7050"\: No such file or directory
sed: can't read rmiServerPortPlatform="7051"\: No such file or directory
sed: can't read \/\>: No such file or directory
それは完全に罰金記号未満と「リスナー」を追加しながらこれは私が設定した内容です。
私の質問は何ですか、私は間違っていますか? sedのコマンドがどのように見えるように、変数に二重引用符との競合を削除するには、単一引用符の代わりに、sedコマンドで二重引用符を使用して
"$ sedkey" '/ a \' "$ sednew" server-wc.xml' ... sednewの二重引用符があなたのsedコマンドの二重引用符と重複しています – Sundeep
完璧だった、ありがとう! – user3074653
かどうか、スペースは問題を引き起こしていた... @that他の男の答えを参照してください... – Sundeep