使用sed将字符串的一部分附加到字符串的前面

时间:2015-08-09 18:21:14

标签: regex string bash sed

在Linux中,我有一个字符串,并希望使用sed将字符串中找到的数字附加到它的前面,然后用冒号。例如,我有字符串

word word word 01 word word 02 word word word word 03 word

并希望

03:word word word 01 word word 02 word word word word 03 word

我可以用

sed 's/^/:/' 

将冒号附加到前面,但是对于每个单独的字符串,我想将03位置的数字复制到前面。

2 个答案:

答案 0 :(得分:0)

您可以使用:

sed -r 's/(.*[^0-9])([0-9]+)/\2:\1\2/' <<< "$string"

我正在使用替换命令s(.*[^0-9])捕获(贪婪)所有内容,直到字符串中的最后一个数字进入子模式1.数字本身([0-9] +)转到子模式2.

在替换模式中,我们在2前面打印子模式2,并在它们之间添加冒号。

答案 1 :(得分:0)

由于您将输入视为列,因此awk可能会提供更好的服务。

以下是sed:

的列式方法
sed -r 's/^(([^ ]+ ){11})([^ ]+)/\3:\1\3/'

(如果你的&#34; 03&#34;专栏有所改变,只需将{11}更改为“{yournewcolumnnumber-1}”

使用awk,事情更具可读性

awk '{print $12 ":" $0}'