如何使用regexp将字符串插入每个连续的选项卡?

时间:2013-12-30 10:15:06

标签: regex sed

我想在每个连续标签中插入一个字符串。

输入数据的格式如下:

Column1\tColumn2\t\t\t\tColumn6....

这是我的代码

sed -e 's/\t\t/\tString\t/g'

有4个连续标签,所以我希望插入3个'String'。

'Column1\tColumn2\tString\tString\tString\tColumn6...... 

但是我得到了结果,只插入了2个'String'。 在每对之间插入。

'Column1\tColumn2\tString\t\tString\tColumn6...... 

如何获得正确的结果?

2 个答案:

答案 0 :(得分:3)

您可以递归此命令:

$ echo -e "Column1\tColumn2\t\t\t\tColumn6...." | sed ':a;s/\t\t/\tString\t/g;ta'
Column1 Column2 String  String  String  Column6....

答案 1 :(得分:2)

正如@Birei指出的那样,sed正则表达式很难做到这一点,因为它不能使用前瞻和后瞻断言。

另一方面,这在perl

中很容易
$ echo -e "Column1\tColumn2\t\t\t\tColumn6...." | perl -pe 's/\t(?=\t)/\tString/g'
Column1 Column2 String  String  String  Column6....

也就是说,用 TAB +“String”替换后面带有TAB 的TAB。