0

我有一个带有随机乱码文本的文本文件。文本中有 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

我已经四处询问,知道我需要一个sed与正则表达式匹配的命令,([A-Z]{6}[0-9]{6})但我不够熟练,无法解决它。

4

3 回答 3

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]用 just[A-Z]替换。

于 2013-10-18T19:52:08.350 回答
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
于 2013-10-18T23:34:40.317 回答
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版本awk

pawk --import re -s 's = re.search(r"[A-Z]{6}\d{6}", l).group(); print l, s' <infile
于 2013-10-18T19:51:21.133 回答