sed
動作する次の正規表現があります。
sed -i -E "s/customer_metadata[(]([0-9][0-9][0-9]*-([A-Z][a-z]-){0,1}[3-6]),([0-9][0-9][0-9]*-([A-Z][a-z]-){0,1}[3-6]),([0-9][0-9][0-9]*-([A-Z][a-z]-){0,1}[3-6])/\5,$NEW_DATA/g" file
しかし、グループをとるパターンが繰り返されるので単純化できないかと思います。また、\5
各セットごとに1つずつあるので、2番目のセットを計算するという事実は()?
エラーが発生しやすいようです。
この正規表現を改善する方法はありますか?
答え1
[0-9][0-9][0-9]*
同じです[0-9]{2,}
。([A-Z][a-z]-){0,1}
同じですか?([A-Z][a-z]-)?
- 一部の括弧を削除してください。
略式:
customer_metadata[(][0-9]{2,}-([A-Z][a-z-]-)?[3-6],[0-9]{2,}-([A-Z][a-z]-)?[3-6],([0-9]{2,}-([A-Z][a-z]-)?[3-6])
そうでなければ
customer_metadata[^,]+,[^,]+,([0-9]{2,}-([A-Z][a-z]-)?[3-6])
これは非常に注意深く、最初の2つのコンマ間のビット形式が正しいことを確認する必要があるかどうかによって異なります。
そうでなければ
customer_metadata[^,]+,[^,]+,([^-]+-([^-]+-)?.)
3番目のカンマで区切られた文字列がまたはsomething-something-character
形式であることを確認してくださいsomething-character
。