绕过sed反向引用限制\ 1到\ 9

Ste*_*e M 17 regex shell backreference sed

sed手册明确指出,替代字符串中可用的替代字符串可用的编号为\ 1到\ 9.我正在尝试解析一个包含10个字段的日志文件.

我为它形成了正则表达式,但是第十场比赛(以及之后的任何内容)都无法访问.

有没有人有一种优雅的方法来规避KSH中的这种限制(或者我可以移植到shell脚本的任何语言)?

rob*_*ert 13

你可以perl -pe 's/(match)(str)/$2$1/g;'用来代替sed吗?规避反向引用限制的方法是使用除sed之外的其他内容.

另外,我想你可以分两步进行替换,但我不知道你的模式,所以我无法帮你解决问题.


小智 5

使用-e拆分流,只要替换的元素与您拆分的组一起使用即可.当我进行日期分割以便我可以将日期时间重新组合成14位数的字符串时,我不得不将流分割3次.

echo "created: 02/05/2013 16:14:49" |  sed -e 's/^\([[:alpha:]]*: \)//' -e 's/\([0-9]\{2\}\)\(\/\)\([0-9]\{2\}\)\(\/\)\([0-9]\{4\}\)\( \)/\5\1\3/' -e 's/\([0-9]\{2\}\)\(\:\)\([0-9]\{2\}\)\(\:\)\([0-9]\{2\}\)/\1\3\5/'
Run Code Online (Sandbox Code Playgroud)

20130205161449