使用sed在string中追加值的字符串

时间:2013-11-20 19:58:37

标签: regex linux string sed awk

我的字符串以:

结尾
...", "VERI-1000")

我试图使用sed(或任何其他工具)将它们格式化为

...", "(VERI-1000)" uid="1000"/>

“VERI”和“1000”值会多次更改,因此并不总是“VERI”而不是“1000”

我想那时我正在尝试搜索“)字符串之前的数值,然后在uid =”

之后插入该值

2 个答案:

答案 0 :(得分:2)

试试这个sed:

sed -i.bak 's~"\([^"-]*\)-\([0-9]*\)")~"(\1-\2") uid="\2"/>~' file

答案 1 :(得分:0)

使用GNU sed,您可以执行以下操作:

sed -r 's_([[:digit:]]+)"\)$_& uid="\1"/>_'

该命令取代了这个:

([[:digit:]]+)"\)$
^ start numbered group (number 1)
 ^^^^^^^^^^^^ any number of digits
             ^ close numbered group
              ^^^^ quote, bracket, EOL

用这个:

& uid="\1"/>
^ all of the matched string
       ^^ contents of group number 1

示例:

sed -r 's_([[:digit:]]+)"\)$_& uid="\1"/>_' <<<'...", "VERI-1000")'
...", "VERI-1000") uid="1000"/>

与POSIX兼容的方式:

sed 's_\([[:digit:]]\{1,\}\)")$_& uid="\1"/>_'