我可以在sed中提到从其他模式的反向引用

假设我有这个数据

1:a:b:c 2:d:e:f 3:a:b 4:a:b:c:d:e:f 

和我想要的输出是

 1a1b1c 2d2e2f 3a3b 4a4b4c4d4e4f 

我从这个问题得到了这个

我正在尝试的解决scheme是这样的

sed -re 's/^([0-9]):/\1/g;s/:/L/g' temp.txt

我有两种不同的模式。 我只是想知道,我可以在第二种模式中使用\1

喜欢这个

sed -re 's/^([0-9]):/\1/g;s/:/\1/g' temp.txt

你不能这样做,但还有另一种方法:

 sed ':a;s/^\([0-9]*\):\([^:]*\):/\1:\2\1/;ta;s/://' input 

说明

 do { // a: 1) match numbers at the beginning and a `:` // ^\([0-9]*\): 2) match and remember everything that is not `:` upto an `:` // \([^:]*\): 3) swap the `:` with the number from 1 (keep the first `:`) // /\1:\2\1/ } while (there are matches) // ta finally delete the `:` after the number // s/:// 

捕获组只能用于创建替换命令。这是学习sed的很好的资源: http : //www.grymoire.com/Unix/Sed.html

解决你的问题的一个更好的方法是使用awk

 awk -F: '{ OFS=$1; $1="" }1' file 

结果:

 1a1b1c 2d2e2f 3a3b 4a4b4c4d4e4f 

说明:

-F标志将字段分隔符设置为冒号( -F: 。 然后,对于每一行输入,将输出字段分隔符设置为第一个字段( OFS="$1" )和“删除”第一个字段(或者将其设置为空; $1="" )。 1结束,使默认打印。 HTH。

这可能适用于你(GNU sed):

 sed -r ':a;s/^(([^:]*):.*):|:/\1\2/;ta' file