2018 Jul. 20.
2018 Jul. 19.
sedの s/regexp/replacement/ におけるregexp内の文字としての\には\\とエスケープする必要がある。
ケースA(bash上のsedでうまくいかない)
Str='"wr\"ddadf\"ab",a'
Search='"wr\"ddadf\"ab"'
echo $Str | sed -e s/${Search}//
結果: "wr\"ddadf\"ab",a
(期待していた結果: ,a )
(検索文字列Searchを短くしていくと)
ケースB(うまくいかない)
Str='"wr\"ddadf\"ab",a'
Search='"wr\"ddadf\'
echo $Str | sed -e s/${Search}//
結果: sed: -e expression #1, char 15: `s' コマンドが終了していません
ケースC(Str内の\を\\とエスケープするとうまくいく)
ケースD(うまくいかない)
Str='"wr\"ddadf\"ab",a'
Search='"wr\"d'
echo $Str | sed -e s/${Search}//
結果: "wr\"ddadf\"ab",a
(期待していた結果: dadf\"ab",a )
ケースE(Str内の\を\\とエスケープするとうまくいく)
ケースF(うまくいかない)
Str='"wr\"ddadf\"ab",a'
Search='"wr\"'
echo $Str | sed -e s/${Search}//
結果: "wr\"ddadf\"ab",a
(期待していた結果: ddadf\"ab",a )
ケースG(Str内の\を\\とエスケープするとうまくいく)
Str='"wr\"ddadf\"ab",a'
Search='"wr\\"'
echo $Str | sed -e s/${Search}//
ケースH(うまくいかない)
Str='"wr\"ddadf\"ab",a'
Search='"wr\'
echo $Str | sed -e s/${Search}//
結果: sed: -e expression #1, char 8: `s' コマンドが終了していません
sedの s/regexp/replacement/ におけるregexp内の文字としての\には\\とエスケープする必要がある。
ケースA(bash上のsedでうまくいかない)
Str='"wr\"ddadf\"ab",a'
Search='"wr\"ddadf\"ab"'
echo $Str | sed -e s/${Search}//
結果: "wr\"ddadf\"ab",a
(期待していた結果: ,a )
(検索文字列Searchを短くしていくと)
ケースB(うまくいかない)
Str='"wr\"ddadf\"ab",a'
Search='"wr\"ddadf\'
echo $Str | sed -e s/${Search}//
結果: sed: -e expression #1, char 15: `s' コマンドが終了していません
ケースC(Str内の\を\\とエスケープするとうまくいく)
Str='"wr\"ddadf\"ab",a'
Search='"wr\\"ddadf\\'
echo $Str | sed -e s/${Search}//
Search='"wr\\"ddadf\\'
echo $Str | sed -e s/${Search}//
結果: "ab",a
Str='"wr\"ddadf\"ab",a'
Search='"wr\"d'
echo $Str | sed -e s/${Search}//
結果: "wr\"ddadf\"ab",a
(期待していた結果: dadf\"ab",a )
ケースE(Str内の\を\\とエスケープするとうまくいく)
Str='"wr\"ddadf\"ab",a'
Search='"wr\\"d'
echo $Str | sed -e s/${Search}//
Search='"wr\\"d'
echo $Str | sed -e s/${Search}//
結果: dadf\"ab",a
Str='"wr\"ddadf\"ab",a'
Search='"wr\"'
echo $Str | sed -e s/${Search}//
結果: "wr\"ddadf\"ab",a
(期待していた結果: ddadf\"ab",a )
ケースG(Str内の\を\\とエスケープするとうまくいく)
Str='"wr\"ddadf\"ab",a'
Search='"wr\\"'
echo $Str | sed -e s/${Search}//
結果: ddadf\"ab",a
ケースH(うまくいかない)
Str='"wr\"ddadf\"ab",a'
Search='"wr\'
echo $Str | sed -e s/${Search}//
結果: sed: -e expression #1, char 8: `s' コマンドが終了していません
考察:次のケースFとの違いは\なので、\が続く/のエスケープ文字に解釈されているのか?
ケースJ(うまくいく)
Str='"wr\"ddadf\"ab",a'
Search='"wr'
echo $Str | sed -e s/${Search}//
結果: \"ddadf\"ab",a (期待どおり)
ケースI(Str内の\を\\とエスケープするとうまくいく)
Str='"wr\"ddadf\"ab",a'
Search='"wr\\'
echo $Str | sed -e s/${Search}//
結果: "ddadf\"ab",a
Str='"wr\"ddadf\"ab",a'
Search='"wr\\'
echo $Str | sed -e s/${Search}//
結果: "ddadf\"ab",a
Str='"wr\"ddadf\"ab",a'
Search='"wr'
echo $Str | sed -e s/${Search}//
結果: \"ddadf\"ab",a (期待どおり)
0 件のコメント:
コメントを投稿