在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
,所以我使用的是第二组()?
,这一事实似乎容易出错。
有什么方法来改进这个正则表达式吗?
发布于 2018-06-10 10:06:34
[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])
这取决于您是否需要非常小心并验证前两个逗号之间的位是否采用正确的格式。
或者只是
customer_metadata[^,]+,[^,]+,([^-]+-([^-]+-)?.)
以验证第三个以逗号分隔的字符串是否位于something-something-character
或something-character
窗体上。
https://unix.stackexchange.com/questions/448918
复制相似问题