我有一个带有随机乱码文本的文本文件。在文本中有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})
的正则表达式,但我还不够精通其他方法。
答案 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