0

ランダムに文字化けしたテキストを含むテキスト ファイルがあります。テキストの中には、次のような 6 つの文字と 6 つの数字の一意の文字列があります。

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

以下の 2 行のように、文字列を抽出して行末に追加する必要があります。

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

私は周りに尋ねて、sedコマンドをの正規表現と一致させる必要があることを知っていますが、そうでなければそれを解決するの([A-Z]{6}[0-9]{6})に十分なほど熟練していません.

4

3 に答える 3

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 に答える