sedコマンドでの置換対象文字列にやたらと特殊文字が含まれている場合にめちゃめちゃハマったのでメモを残す。
注目すべきは以下3点。
- sedコマンドの引数は特殊文字3種($`\)以外をエスケープするダブルクォートを使用すること
- 特殊文字3種($`\)のエスケープにはバックスラッシュを使用すること
- ダブルクォートで囲まれた文字列の内部でダブルクォートを使用する場合にはバックスラッシュでエスケープすること
#!/bin/bash
# note <RTF.list>
# s3://mybucket-01/cloudwatch/env01/RTF/`date -d '${target_date}' +"%Y%m"`/,_aws_RTF_errorlog_`date -d '${target_date}' +"%Y%m%d"`
listfile=/opt/usrshell/conf/RTF.list
while read line
do
echo ${line}
target_line=$(echo ${line} | sed "s/\`date -d '\${target_date}' +\"%Y%m\"\`/hogehoge/")
echo ${target_line}
done < ${listfile}