初学sed正则表达式,请懂的人解释下s/\(.*\).*:\(.*\)/\2:\1/'功能是把冒号左右内容对换但我理解的是,匹配的内容,应该先是一个括号(),括号里可以有0-n个字符,接着是0-n字符,接着是冒号,再是一个括

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/05 05:53:14
初学sed正则表达式,请懂的人解释下s/\(.*\).*:\(.*\)/\2:\1/'功能是把冒号左右内容对换但我理解的是,匹配的内容,应该先是一个括号(),括号里可以有0-n个字符,接着是0-n字符,接着是冒号,再是一个括

初学sed正则表达式,请懂的人解释下s/\(.*\).*:\(.*\)/\2:\1/'功能是把冒号左右内容对换但我理解的是,匹配的内容,应该先是一个括号(),括号里可以有0-n个字符,接着是0-n字符,接着是冒号,再是一个括
初学sed正则表达式,请懂的人解释下
s/\(.*\).*:\(.*\)/\2:\1/'
功能是把冒号左右内容对换
但我理解的是,匹配的内容,应该先是一个括号(),括号里可以有0-n个字符,接着是0-n字符,接着是冒号,再是一个括号()里面有0-n个字符的,匹配这样的字符串,把冒号左右的对掉.
pattern里明明有\( \),这样的括号,为什么没有括号包起来的字符串也会被匹配到?

初学sed正则表达式,请懂的人解释下s/\(.*\).*:\(.*\)/\2:\1/'功能是把冒号左右内容对换但我理解的是,匹配的内容,应该先是一个括号(),括号里可以有0-n个字符,接着是0-n字符,接着是冒号,再是一个括
sed默认使用的是古老的基本正则表达式(BRE)
's/(.*):(.*)/\2:\1/'
上面这样不加反斜杠转义才是你理解的那种形式,匹配在括号里的字符
's/\(.*\):\(.*\)/\2:\1/'
圆括号前加上反斜杠转义,才是我们理解的分组,与现在大多数语言使用的含义相反.
如果不习惯,可以使用-r参数,使用扩展正则表达式
sed -r 's/(.*):(.*)/\2:\1/'
sed -r 's/\(.*\):\(.*\)/\2:\1/'
这样就与你的理解一致了