sed替换组/匹配

时间:2017-01-20 12:29:21

标签: sed

我有以下日志行:

  

2017-01-01客户:abc ID:144

我需要处理它并将其插入MySQL,但有时数据可能会出错:

  

2017-01-01客户:a,b .c ID:144

如何仅在"客户端内执行sed替换:xxx"组,所以我可以删除不需要的字符?

1 个答案:

答案 0 :(得分:1)

使用反向引用和t命令,仅在Client:ID之间捕获和输出所需字符:

$ sed -r ':a;s/(Client:[^ ,.]*)[ ,.](.* ID)/\1\2/;ta;' <<< "2017-01-01 Client:a, b .c ID:144"
2017-01-01 Client:abc ID:144

捕获并输出所有截至下一个不需要的字符([ ,.])的字符。如果替换成功,t(用于测试)命令将循环到脚本的开头(到:a标签)。