sedで不均衡な括弧やスラッシュを回避するには?

sedで不均衡な括弧やスラッシュを回避するには?

使用しようとしていますが、パターンにsed角かっこ[]とスラッシュ(/)が含まれています。

引用してみましたが役に立ちません。

どうやって逃げますか?


例:

$ sed -i'.bak' "s/^includes[] =/;includes[] =/g" *.make
sed: 1: "s/^includes[] =/;includ ...": unterminated substitute in regular expression
$ sed -i'.bak' 's/^includes[] = includes/;includes/g' *.make
sed: 1: "s@^includes[] = i ...": unbalanced brackets ([])
$ sed -i'.bak' 's/^includes[] = foo/includes//;includes[] = foo/includes//g' *.make
sed: 1: "s/^includes[] = foo/inc ...": bad flag in substitute command: '/'

ベストアンサー1

スラッシュをエスケープするには、スラッシュを除くすべての文字を使用して正規表現を区切ることができます。

たとえば( foo1/-> foo2/):

sed "s@foo1/@foo2/@"
sed "s|foo1/|foo2/|"

括弧をエスケープするには(スラッシュにも適用されます)、区切り文字の前にバックスラッシュ文字を配置して、その文字が文字通り処理されるようにする必要があります。

たとえば( foo[] =-> ;foo[] =):

sed "s/foo\[\] =/;foo\[\] =/"

man sedSed 正規表現)。

おすすめ記事