如何用sed进行匹配和部分替换

How to match and partial substitute with sed

如何匹配子字符串“2153846-11”(有时仅由数字组成,如“2153846”,有时如“2153846-11”或“2153846_11”,有时如“2153846-1” " 总是数字并且在第一组中不少于 5) 在以下内容中:

"01/16/2015","2153846-11","2015-01-16 02:50:18.0","lch_demo_hidemi-19459072-2","","01/16/2015"

并用第一组(在 dash/underscore 之前)替换匹配的字符串,删除第二组。

最终结果将是:

"01/16/2015","2153846","2015-01-16 02:50:18.0","lch_demo_hidemi-19459072-2","","01/16/2015"

该指令将被写入一个独特的 sed 行,如

sed -e 's/...//g' < myfile

谢谢

您可以使用这个 sed:

sed 's/"\([0-9]*\)[_-][0-9]*"/""/g' file
"01/16/2015","2153846","2015-01-16 02:50:18.0","lch_demo_hidemi-19459072-2","","01/16/2015"

您可以试试下面的 sed 命令。

$ echo '"01/16/2015","2153846-11","2015-01-16 02:50:18.0","lch_demo_hidemi-19459072-2","","01/16/2015"' | sed -r 's/"(2153846)([_-]11)?"/""/g'
"01/16/2015","2153846","2015-01-16 02:50:18.0","lch_demo_hidemi-19459072-2","","01/16/2015"