0

次のデータを含むテキスト ファイルがあります。次のように 2 列目を変更したい36 65 fb 5f 1a c1です0x3665fb5f1ac1。 )

最初の行を次のようにしたい

0x5212cb03ca115ac0      0x3665fb5f1ac1

0x5212cb03ca115ac0      36 65 fb 5f 1a c1
0x5212cb03ca115cc0      36 65 fb 5f 1a c7
0x5212cb03ca115ea0      36 65 fb 5f 1a cd
0x5212cb03ca1160c0      36 65 fb 5f 1a d3
0x5212cb03ca1162a0      36 65 fb 5f 1a d9
0x5212cb03ca1164c0      36 65 fb 5f 1a de
0x5212cb03ca1166a0      36 65 fb 5f 1a e4
0x5212cb03ca1168a0      36 65 fb 5f 1a ea
0x5212cb03ca116aa0      36 65 fb 5f 1a f0
0x5212cb03ca116ca0      36 65 fb 5f 1a f6
0x5212cb03ca116ea0      36 65 fb 5f 1a fc
0x5212cb03ca1170a0      36 65 fb 5f 1b 02
0x5212cb03ca117280      36 65 fb 5f 1b 08
0x5212cb03ca117480      36 65 fb 5f 1b 0e
0x5212cb03ca117680      36 65 fb 5f 1b 14
4

8 に答える 8

3

シンプルなawkソリューション...

awk '{ print $1"      0x"$2$3$4$5$6$7; }' input.txt
于 2013-08-26T20:58:12.947 に答える
2

あなたがvimでそれをするのが好きなら:

%s/\s\s\zs\S.*/\='0x'.substitute(submatch(0),'\s',"","g")/

仕事をします

于 2013-08-26T21:32:43.270 に答える
2

置換あり:

:%s/\w\zs\s\ze\w//g
:%s/\s\+\zs/0x/

またはすべて一緒に:

:%s/\w\zs\s\ze\w//g|%s/\s\+\zs/0x/
于 2013-08-26T21:12:31.683 に答える
1

Vim ソリューション

特別なことは何もせずに、2 つの 16 進数の数字の 6 つのグループをキャプチャして、必要な順序で配置するだけです。

:%s/\v(\x\x)\s(\x\x)\s(\x\x)\s(\x\x)\s(\x\x)\s(\x\x)$/0x\1\2\3\4\5\6

これを出力として取得します

0x5212cb03ca115ac0      0x3665fb5f1ac1
0x5212cb03ca115cc0      0x3665fb5f1ac7
0x5212cb03ca115ea0      0x3665fb5f1acd
0x5212cb03ca1160c0      0x3665fb5f1ad3
0x5212cb03ca1162a0      0x3665fb5f1ad9
0x5212cb03ca1164c0      0x3665fb5f1ade
0x5212cb03ca1166a0      0x3665fb5f1ae4
0x5212cb03ca1168a0      0x3665fb5f1aea
0x5212cb03ca116aa0      0x3665fb5f1af0
0x5212cb03ca116ca0      0x3665fb5f1af6
0x5212cb03ca116ea0      0x3665fb5f1afc
0x5212cb03ca1170a0      0x3665fb5f1b02
0x5212cb03ca117280      0x3665fb5f1b08
0x5212cb03ca117480      0x3665fb5f1b0e
0x5212cb03ca117680      0x3665fb5f1b14

スペースの代わりに列を区切るタブがあったため、ファイルからすべてのスペースを削除できました。

:%s/ //g

0xそして、最初のタブの後に追加します

:%s/\t/\t0x

またはすべて一緒に

:%s/ //g|%s/\t/\t0x
于 2013-08-26T20:49:49.030 に答える