Sortie XXD sans coupure de ligne

13

Puis-je dire xxdde ne pas imprimer de sauts de ligne dans sa sortie et d'avoir mon vidage sur une seule ligne continue?

[user@localhost] : ~ $ echo -n "this is a long line and xxd is going to take multiple lines to print it" | xxd -p
746869732069732061206c6f6e67206c696e6520616e6420787864206973
20676f696e6720746f2074616b65206d756c7469706c65206c696e657320
746f207072696e74206974
Juteux
la source
5
Vous pouvez simplement utiliser trpour supprimer les nouvelles lignes, par exemple... | xxd -p | tr -d \\n
don_crissti
Cela dépend de ce dont vous avez besoin, mais une option pratique xxdest qu'il ignore les espaces blancs pour l'inverse -rde son vidage postcript / plain -p(ou tout autre hexdump simple d'ailleurs). par exemple. La ligne suivante se termine avec \n, mais la sortie inversée est exactement celle qui a été entrée: echo {1..14} | xxd -p | xxd -p -rproduit la sortie: 1 2 3 4 5 6 7 8 9 10 11 12 13 14\n - l' \nest à partir deecho
Peter.O
1
Vous pouvez également utiliser à la hexdump -v -e '/1 "%02X"'place de xxd.
dirkt

Réponses:

15

Vous avez besoin de l'option -c.

# echo -n "this is a long line and xxd will print it as one line" | xxd -p -c 1000000

746869732069732061206c6f6e67206c696e6520616e64207878642077696c6c207072696e74206974206173206f6e65206c696e65

Voici quelques informations de la documentation :

-c cols | -cols cols format octets par ligne. Par défaut 16 (-i: 12, -ps: 30, -b: 6). 256 au maximum.

La documentation indique que la valeur maximale pour le paramètre "c" est 256, mais j'ai essayé de plus grandes valeurs et cela a fonctionné. Vérifiez-le:

# xxd -c 1000000 -p -l 1000000 /dev/urandom | wc -c
2000001

Ici, je vide un million d'octets de / dev / random et j'obtiens une chaîne de 2 millions + 1 caractères. Chaque octet de / dev / random est représenté par 2 caractères et l'octet supplémentaire est la nouvelle ligne finale.

Graf
la source