Vraag Hoe verwijder alles behalve nummer uit hexdump-uitvoer?


Ik heb de base64 uitvoer voor een enorm bestand, de uitvoer is natuurlijk ook enorm en in een eigen bestand wilde ik het grote aantal erin converteren naar base10 dus ik heb het nu gebruikt hexdump om het te krijgen base16 formaat ... Maar de uitvoer ziet er ongeveer zo uit:

0077000 0022 00de 0000 0000 de00 0800 0000 0000
0077010 0008 0473 0c16 221f 0200 0000 0001 0100
0077020 0001 0022 00de 0000 0000 de00 0800 0000
0077030 0000 0008 0473 0c16 221f 0200 0000 0001
0077040 0100 0101 0032 00df 0000 0000 df00 0800
0077050 0000 0000 0008 0473 0c16 221f 0200 0000
0077060 0001 0100 0010 0073 006c 002d 006d 006f
0077070 0064 0065 006d 0000 0000 0000 0000 0000
0077080 0000 0000 0000 0000 0000 0000 0000 0000
*
0077800 0022 00df 0000 0000 df00 0800 0000 0000
0077810 0008 0473 0c16 221f 0200 0000 0001 0100
0077820 0001 0022 00df 0000 0000 df00 0800 0000
0077830 0000 0008 0473 0c16 221f 0200 0000 0001
0077840 0100 0101 0078 d690 0008 0800 90d6 961a
0077850 0006 0600 1a96 0473 0c16 221f 0000 0000
0077860 0001 0100 0056 0073 006c 002d 006d 006f
0077870 0064 0065 006d 002d 0064 0061 0065 006d
0077880 006f 006e 005f 0032 002e 0039 002e 0031
0077890 0031 007e 0032 0030 0031 0031 0030 0033
00778a0 0032 0031 002d 0031 0031 005f 0069 0033
00778b0 0038 0036 002e 0064 0065 0062 0000 0000
00778c0 0000 0000 0000 0000 0000 0000 0000 0000
*

ik weet hoe je alle spaties en retouren verwijdert en alles op één regel maakt, maar hoe verander ik de sterren in de verwijderde lijnen die ze vertegenwoordigen en verwijder ik de eerste 8 tekens die geen deel uitmaken van het nummer? Of is er misschien een manier om te maken hexdump gewoon het nummer uitvoeren in plaats van alle andere dingen? Het bestand is duidelijk te groot voor mij om het handmatig te doen, dus een commando om het automatisch te doen zou enorm gewaardeerd worden. Ik run Ubuntu GNOME 15.10 met GNOME 3.18.


0
2018-04-11 17:58


oorsprong


Vertel ons alstublieft het doel van die oefening :-) - guntbert
@guntbert: Het is een geheime Panda, het Panda High Command zou niet blij zijn als ik het je vertelde. ;)


antwoorden:


Je kunt gebruiken xxd om een ​​hex-dump in platte stijl te maken

$ xxd -p /etc/passwd | head -n 3                                                                                      
726f6f743a783a303a303a726f6f743a2f726f6f743a2f62696e2f626173
680a6461656d6f6e3a783a313a313a6461656d6f6e3a2f7573722f736269
6e3a2f7573722f7362696e2f6e6f6c6f67696e0a62696e3a783a323a323a

En output het naar bestand

$ xxd -p /etc/passwd > output.hex

U kunt gegevens later herstellen met -r -p opties

$ xxd -r -p output.hex  | head -n 3                                                                                   
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

Koppel andere methoden:

$ hexdump -ve '1/1 "%.2x"' /etc/passwd
$  od -t x1 /etc/passwd | awk '{$1=""; gsub(/\ /,"");print}'

5
2018-04-11 18:42





Gebruik hexdump een aangepast uitvoerformaat specificeren:

hexdump -ve '8/1 "%04x " "\n"'
  • -v: print alle gegevens (verwijdert de asterisken, wat betekent herhaling van de laatste regel van de uitvoer)
  • -e '8/1 "%04x " "\n"': print 8 keer een enkele byte in een nul-padded (tot vier cijfers) hoofdletter in de vorm van een kleine afbeelding gevolgd door een spatie en voegt een nieuwe regel toe totdat er geen gegevens meer beschikbaar zijn.
% </dev/urandom head -c 32 | hexdump -ve '8/1 "%04x " "\n"'
003c 00b0 00bb 00de 003d 0041 0072 00a5
00c2 0078 00b9 009b 00b7 00fc 0076 0030
00b7 005c 00f4 0036 00a0 004e 003b 001b
0028 00cd 006a 0079 0055 0014 000c 007b

Ik weet niet zeker waarom je dat zou willen doen, maar blijkbaar wil je alles op één regel afdrukken zonder spaties.

Als dat het geval is:

hexdump -ve '/1 "%04x"'
% </dev/urandom head -c 32 | hexdump -ve '/1 "%04x"'
0046007c00b2003300e0009b00eb00d500bf006900570081008e003e005a002f0024001700ab00000084001e00ad00ab003a004800bf0039005c00aa00030072%
% 

4
2018-04-11 18:53





Standaard hexdump zal herhaalde regel verwijderen en een single plaatsen * op de plaats waar een of meer regels zijn verwijderd. Door de eerste kolom met bestandsposities te verwijderen, bent u de enige indicatie verloren over het aantal regels dat is verwijderd, zodat het oorspronkelijke bestand niet meer kan worden gereconstrueerd.

Waarschijnlijk wilt u een nummer dat het originele bestand op een unieke manier vertegenwoordigt, dus u zou moeten beginnen hexdump -v. Zoals te zien is in een vorig antwoord, is het mogelijk om te geven hexdump andere argumenten om het uitvoerformaat te veranderen in het formaat dat u vroeg.

Echter, als u om wat voor reden dan ook alleen de uitvoer van hebt hexdump -v en niet het oorspronkelijke bestand, het zou ook mogelijk zijn om de eerste kolom en witruimte als volgt te verwijderen:

cat filename.txt | cut -c9- | tr -dc 0-9a-f

Hier cut -c9- verwijdert de meest linkse 8 tekens van elke regel die alleen het 9e teken uitvoert en alles erna. En tr -dc 0-9a-f bewaart alleen tekens in het bereik 0-9 of a-f, dus alle spaties en nieuwe regels worden verwijderd.


2
2018-04-11 20:41