sed 代替文字列で '(一重引用符) をエスケープします。

sed 代替文字列で '(一重引用符) をエスケープします。

サーバー全体でいくつかの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

おすすめ記事