繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM