在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位置的数字复制到前面。
答案 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}'