REに\ 1が定義されていませんか?

REに\ 1が定義されていませんか?

私のコードは次のとおりです

cat file.ign | sed 's/^([^A-Za-z0-9]+ )/<ignore>\1<\/ignore>/g'

しかし、エラーメッセージが表示されます。

sed: 1: "s/^([^A-Za-z0-9]+ )/<ig ...": \1 not defined in the RE

ベストアンサー1

括弧は、基本正規表現(BRE)構文のリテラルです。キャプチャグループを表すには、次のようにエスケープする必要があります\(\)

また、@BenjaminWのコメントで指摘したように、+BREでは文字通りです。 GNU sed は\+BRE で数量子としてサポートされます。

sed 's/^\([^A-Za-z0-9]\+ \)/<ignore>\1<\/ignore>/g'

(しかし他の実装ではそうではないかもしれません)。または、適切にまたはコマンドラインスイッチを使用して拡張正規表現(ERE)モードをオンにします-E(該当するバージョンのマニュアルを確認してください)。-r

sed -E 's/^([^A-Za-z0-9]+ )/<ignore>\1<\/ignore>/g'

または、POSIX準拠の数量子を使用してください。\{1,\}

sed 's/^\([^A-Za-z0-9]\{1,\} \)/<ignore>\1<\/ignore>/g'

ASIDE(グローバル置換)修飾子は、式がパターンの先頭に固定されているため、ここではg何の効果もありません(1行に1回しか発生しません)。^

おすすめ記事