私のコードは次のとおりです
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回しか発生しません)。^