提取一个字母6个字母和6个数字,然后追加到每一行

时间:2013-10-18 19:47:56

标签: regex linux sed

我有一个带有随机乱码文本的文本文件。在文本中有6个字母和6个数字的唯一字符串,如下所示:

sdfdso3jmvdsoo30)(dfds^dsf sd ;;s dfds;QWERTY123456d fdsfdsf4544;
sadk321143)S3244@#((#@4^^^   fdsfgdsf324; er4; ABCDEF123456dsfdsdsfd

我需要提取字符串并将其附加到该行的末尾,如下面的两行:

  

sdfdso3jmvdsoo30)(dfds ^ dsf sd ;; s dfds; QWERTY123456d fdsfdsf4544;   QWERTY123456 sadk321143)S3244 @#((#@ 4 ^^^ fdsfgdsf324; er4;   ABCDEF123456dsfdsdsfd ABCDEF123456

我已经四处询问并知道我需要sed命令匹配([A-Z]{6}[0-9]{6})的正则表达式,但我还不够精通其他方法。

3 个答案:

答案 0 :(得分:1)

$ sed -r 's/(.*)([a-zA-Z]{6}[0-9]{6})(.*)/& \2/' file 
sdfdso3jmvdsoo30)(dfds^dsf sd ;;s dfds;QWERTY123456d fdsfdsf4544; QWERTY123456
sadk321143)S3244@#((#@4^^^   fdsfgdsf324; er4; ABCDEF123456dsfdsdsfd ABCDEF123456

注意:如果您只对大写字母感兴趣,请使用[a-zA-Z] 替换[A-Z]

答案 1 :(得分:0)

尝试:

sed 's/^\(.*\)\([A-Z]\{6\}[0-9]\{6\}\)\(.*\)$/\1\2\3 \2/' infile

它产生:

sdfdso3jmvdsoo30)(dfds^dsf sd ;;s dfds;QWERTY123456d fdsfdsf4544; QWERTY123456
sadk321143)S3244@#((#@4^^^   fdsfgdsf324; er4; ABCDEF123456dsfdsdsfd ABCDEF123456

更新:只是为了好玩并添加不同的内容,这里是pawk版本。它是python的{​​{1}}版本:

awk

答案 2 :(得分:0)

使用gnu awk

awk  '{a=gensub(/.*([[:upper:]][[:upper:]][[:upper:]][[:upper:]][[:upper:]][[:upper:]][0-9][0-9][0-9][0-9][0-9][0-9]).*/,"\\1",$0);print $0,a}' file
sdfdso3jmvdsoo30)(dfds^dsf sd ;;s dfds;QWERTY123456d fdsfdsf4544; QWERTY123456
sadk321143)S3244@#((#@4^^^   fdsfgdsf324; er4; ABCDEF123456dsfdsdsfd ABCDEF123456