[英]Using sed to append part of a string to the front of the string
在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位置的数字也复制到前面。
您可以使用此:
sed -r 's/(.*[^0-9])([0-9]+)/\2:\1\2/' <<< "$string"
我正在使用替代命令s
。 (.*[^0-9])
捕获所有内容(贪婪),直到字符串中的最后一个数字进入子模式1。数字本身([0-9] +)进入子模式2。
在替换模式中,我们在2之前打印子模式2,并在它们之间添加冒号。
由于您将输入视为列,因此awk可能会更好。
这是sed的专栏式方法:
sed -r 's/^(([^ ]+ ){11})([^ ]+)/\3:\1\3/'
(如果您的“ 03”列曾经更改过,只需将{11}
更改为`{yournewcolumnnumber-1})
使用awk,事情更易读
awk '{print $12 ":" $0}'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.