2

私は正規表現の初心者で、比較的単純なことを達成しようとしています:

次のように配置されたデータセットがあります。

1,AAA,aaaa,BBB,bbbbbb ...
2,AAA,aaaaaaa,BBB,bbb ...
3,AAA,aaaaa,BBB,bb ...

AAA または BBB に続くさまざまな長さ (英数字) の文字列に中括弧を追加することを検討しています (これらは一定です)。

1,AAA,{aaaa},BBB,{bbbbbb} ...
2,AAA,{aaaaaaa},BBB,{bbb} ...
3,AAA,{aaaaa},BBB,{bb} ...

だから私はこの方法でsedを試しました:

sed 's/(AAA|BBB)[[:punct:]].[[:alnum:]]/\1{&}/g' dataset.txt

しかし、私はこの結果を得ました:

1,AAA,{AAA,aa}aa,BBB,{BBB,bb}bbbb, ... 
2,AAA,{AAA,aa}aaaaa,BBB,[BBB,bb}b, ...
3,AAA,{AAA,aa}aaa,BBB,{BBB,bb} ...

明らかに、&の置換部分はsed一致したパターンになりますが、一致したパターンの&後にあるものだけになりたいのですが、何が間違っていますか?

[^ ]また、無駄になった後、単語の境界を追加しようとしました。で頑張りすぎていsedませんか?代わりに、後読みを許可する言語を使用する必要がありますか?

助けてくれてありがとう!

4

3 に答える 3

1

次の sed が機能するはずです。

Linux の場合:

sed -i.bak -r 's/((AAA|BBB)[[:punct:]])([[:alnum:]]+)/\1{\3}/g'

または OSX の場合:

sed -i.bak -E 's/((AAA|BBB)[[:punct:]])([[:alnum:]]+)/\1{\3}/g'

-i入力ファイル自体に変更を保存するためのインラインオプション用です。

于 2013-10-04T07:49:51.750 に答える
1

これを試して:

sed 's/\(AAA\|BBB\),\([^,]*\)/\1,{\2}/g' dataset.txt
于 2013-10-04T08:09:48.983 に答える