サーバー全体でいくつかのiptables変更を実行するスクリプトがあります。スクリプトには、文字列を見つけてその行の前にiptablesルールを挿入するsedコマンドがあります。
私が経験している問題は、私が編集しているファイルがyamlファイルで、その行に「and」がなければならないことです。
挿入されたコンテンツから 'を削除すると機能します。
$ sed 's/.*output_snat_lo.conf:.*/- -t nat -A PREROUTING -d 192.168.1.1 -j DNAT --to-destination 10.0.0.1\n&/' file.yaml
- '-t nat -A POSTROUTING -s 192.168.1.25/32 -d 10.0.0.1 -j SNAT --to-source 172.1.1.1'
- -t nat -A PREROUTING -d 192.168.1.1 -j DNAT --to-destination 10.0.0.1
output_snat_lo.conf:
ただし、スラッシュを使用してエスケープするか二重引用符の中に入れると、スラッシュを含む二重引用符は印刷できませんが、代わりに無効なフラグを送信するオプションが提供されます。
これが私が挿入する内容です。
- '-t nat -A PREROUTING -d 192.168.1.1 -j DNAT --to-destination 10.0.0.1'\n&/' file.yaml
どのような提案/ヒントがありますか?前にもこんなことをしたことがあるようですが、どうしたのか覚えていません。
ベストアンサー1
正規表現に入れたい一重引用符を閉じ、一重引用符をエスケープしてからもう一度開きます。
$ echo "a'b" | sed 's/'\''/X/'
aXb
$ echo "aXb" | sed 's/X/'\''/'
a'b