sedコマンドで「/」 と 「&」を含む場合のエクケープ処理

シェルスクリプト内でテキストファイル内の一部の文字を置換する処理があって、半角空白と「&」を含んでいて、置換がうまく処理されずに変数名が残ってしまいました

$ cat in.txt
CORPORATION 御中

$ sh sed_file.sh
#!/bin/bash

CO="ABC D&E株式会社"

sed -e "s/CORPORATION/${CO}/g" in.txt > out.txt
cat MAILBODY

# 出力結果
ABC DCORPORATION 御中

始めは半角空白があったので、それがで原因と思っていたら、「&」文字のエスケープ処理を忘れたいたのが原因でした。sedコマンドを実行する前に、「&」文字を含む変数をエスケープ処理したら解決しました。

念のために「/」と「&」を下記のようにエスケープ処理しています

OUT=$(echo “$TEST" | sed -e 's/[\/&]/\\&/g’)

$ sh sed_file.sh

#!/bin/bash
CO="ABC D&E株式会社"
CO_ESCAPED=$(echo "$CO" | sed -e 's/[\/&]/\\&/g')

sed -e "s/CORPORATION/${CO_ESCAPED}/g" in.txt > out.txt
cat MAILBODY

# 出力結果
ABC D&E株式会社 御中

 

スポンサーリンク

0
0