sed / grep / awk?: 将匹配模式附加到行尾

pli*_*oot 4 regex awk grep sed

我有一个文件,例如

1,ab012a800,20141205
2,ab023a801,20141205
3,ab012a802,20141205
1,ab024a803,20141205
1,ab012a804,20141205
Run Code Online (Sandbox Code Playgroud)

我想提取“ab012a”部分并将其附加到行尾。

1,ab012a800,20141205,ab012a
2,ab023a801,20141205,ab023a
3,ab012a802,20141205,ab012a
1,ab024a803,20141205,ab024a
1,ab012a804,20141205,ab012a
Run Code Online (Sandbox Code Playgroud)

我可以用 grep 提取:

grep -o '^[a-z][a-z][0-9]*[a-z]' file    
Run Code Online (Sandbox Code Playgroud)

并附加到一行 sed :

sed "s/$/,whatever/"
Run Code Online (Sandbox Code Playgroud)

甚至用 sed 替换模式:

sed '/^[a-z][a-z][0-9]*[a-z]/ s/$/something/' file
Run Code Online (Sandbox Code Playgroud)

但是我如何将匹配的模式附加到行尾?

非常感谢

anu*_*ava 5

您可以使用:

sed -i.bak 's/\(,[a-z][a-z][0-9]*[a-z]\).*$/&\1/' file
1,ab012a800,20141205,ab012a
2,ab023a801,20141205,ab023a
3,ab012a802,20141205,ab012a
1,ab024a803,20141205,ab024a
1,ab012a804,20141205,ab012a
Run Code Online (Sandbox Code Playgroud)

&是替换中的特殊符号,表示使用的正则表达式完全匹配的字符串,并\1表示匹配的组 #1。