パス文字列が入ったシェル変数を扱って混乱したのですが、sedコマンドでの正規表現の区切り文字の考え方がよくわかりません。
下記の例からすると、区切り文字は「スラッシュ」「パイプ・パーセント等」「コロン等」で動作が異なり、「パイプ・パーセント等」を使うのが安全であり、削除の場合は最初の区切り文字の直前にバックスラッシュを置くのがよく、置換の場合は最初の区切り文字の直前にバックスラッシュを置いてはいけないようです。
区切り文字の種類、区切り文字直前のバックスラッシュの意味を日本語で理解できるサイト・資料はないでしょうか?
正規表現文字列にスラッシュが含まれる場合のsedの動作例
スラッシュを区切り文字とする場合
スラッシュ直前にバックスラッシュを付ければよい。
パスが格納されているシェル変数を正規表現にする時は扱いにくい。
cat FILE.txt | sed "/Reg\/Exp/d" => OK cat FILE.txt | sed "s/Reg\/Exp//" => OK
スラッシュを区切り文字とし、最初の区切り文字の直前にバックスラッシュを付けると削除と置換で動作が異なる。
cat FILE.txt | sed "\/Reg\/Exp/d" => OK cat FILE.txt | sed "s\/Reg\/Exp//" => NG。`s' コマンドが終了していません
パイプを区切り文字とする場合
削除と置換で動作が異なる。
cat FILE.txt | sed "|Reg/Exp|d" => NG。不明なコマンド: `|' cat FILE.txt | sed "s|Reg/Exp||" => OK
パイプを区切り文字とし、最初の区切り文字の直前にバックスラッシュを付けると、削除と置換で動作が異なる。
cat FILE.txt | sed "\|Reg/Exp|d" => OK cat FILE.txt | sed "s\|Reg/Exp|d||" => NG。`s' コマンドが終了していません
パーセントを区切り文字とする場合
削除と置換で動作が異なる。
cat FILE.txt | sed "%Reg/Exp%d" => NG。 不明なコマンド: `%' cat FILE.txt | sed "s%Reg/Exp%%" => OK
パーセントを区切り文字とし、最初の区切り文字の直前にバックスラッシュを付けると、削除と置換で動作が異なる。
cat FILE.txt | sed "\%Reg/Exp%d" => OK cat FILE.txt | sed "s\%Reg/Exp%%" => NG。`s' コマンドが終了していません
コロンを区切り文字とする場合
cat FILE.txt | sed ":Reg/Exp:d" => NG。FILE.txtのままが出力される cat FILE.txt | sed "s:Reg/Exp::" => OK
コロンを区切り文字とし、最初の区切り文字の直前にバックスラッシュを付けると、
cat FILE.txt | sed "\:Reg/Exp:d" => OK cat FILE.txt | sed "s\:Reg/Exp::" => NG。`s' コマンドが終了していません

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/16 10:40