在vi/sed模式之间更改字符

在vi/sed模式之间更改字符,sed,replace,wildcard,vi,Sed,Replace,Wildcard,Vi,我正在努力找出如何从各种模式之间获得一个,如: 500000 xyz,CA 我试过这样的方法: sed -E "s/\([a-zA-Z]*\),([a-zA-Z]*\)/\([a-zA-Z]*\) ([a-zA-Z]*\)/g" $file -i 它选择了第一种模式,但又用第二种模式重写了它,我觉得我错过了一些非常简单的东西,我无法解决它,非常感谢任何帮助。我想你错过了捕获组的概念。要在替换字符串中引用搜索的括号部分,请对第一组使用\1,对第二组使用\2,以此类推 修改后的行为: sed -E

我正在努力找出如何从各种模式之间获得一个,如:
500000
xyz,CA

我试过这样的方法:

sed -E "s/\([a-zA-Z]*\),([a-zA-Z]*\)/\([a-zA-Z]*\) ([a-zA-Z]*\)/g" $file -i

它选择了第一种模式,但又用第二种模式重写了它,我觉得我错过了一些非常简单的东西,我无法解决它,非常感谢任何帮助。

我想你错过了捕获组的概念。要在替换字符串中引用搜索的括号部分,请对第一组使用
\1
,对第二组使用
\2
,以此类推

修改后的行为:

sed -E "s/([a-zA-Z]),([a-zA-Z])/\1 \2/g" $file -i

这个修改过的行没有将匹配第一个
([a-zA-Z])
的部分替换为文本“
([a-zA-Z])
”,而是将匹配的部分复制到输出中(第二组也是如此)。

明白了,我完全不明白!你说的有用,我正在申请各种各样的模式。