ケース句を bash スクリプトから削除しようとしています。句はさまざまですが、大文字と小文字の一致文字列の一部として常にバックスラッシュが含まれます。
私はsedを試していましたが、bashスクリプト内でawkまたはperlワンライナーを使用できました。
編集の対象は簡単で、次のようになります。
$cat t.sh
case N in
a\.b);
#[..etc., varies]
;;
esac
バックスラッシュ、セミコロン、またはその両方をエスケープする変数展開に違反しています。「評価」すると、バックスラッシュのエスケープが取り除かれます。そうしないと、セミコロンが追いつきます。そこで、sed内でサブシェル展開を試みました。私が書いたように、これはインタプリタを汚します。セミコロンをさらにエスケープしても効果がないようです。
X='a\.b' ; Y=';;'
sed -i '/$(echo ${X} | sed -n 's/\\/\\\\/g')/,/$(echo ${Y} | sed -n s/\;/\\;/g')/d t.sh
この:
perl -i.bak -ne 'print unless /${X}/ .. /{$Y}/' t.sh # which empties t.sh
と
eval perl -i.bak -ne \'print unless /${X}/ .. /{$Y}/' t.sh # which does nothing