GNU/Linux >> Znalost Linux >  >> Linux

(Un/De)komprimovat řetězec v bash?

Pokud je pro vás 33% ztráta kompresního poměru přijatelná, můžete uložit komprimovaná data kódovaná base64:

me$mybox$ FOO=$(echo "Hello world" | gzip | base64 -w0) # compressed, base64 encoded data
me$mybox$ echo $FOO | base64 -d | gunzip # use base64 decoded, uncompressed data
Hello world

Bude to fungovat, ale každé 3 (komprimované) bajty budou uloženy ve 4 bajtech textu.


Když to uděláte:

hey=$(echo "hello world" | gzip -cf)

V proměnné hey nemáte stejné bajty jako v /tmp/myfile vytvořil:

echo "hello world" | gzip -cf > /tmp/myfile

Dostanete chybu „gzip:stdin je vícedílný soubor gzip – není podporován“ jednoduše proto, že máte poškozená komprimovaná data, která nelze dekomprimovat.

VAR=$(...) konstrukce je určena pro práci s textem. To je důvod, proč například získáte extra zadní trim.


Linux
  1. Jak zkontrolovat, zda řetězec obsahuje podřetězec v Bash

  2. Jak v Bash přidám řetězec za každý řádek v souboru?

  3. URL kódující řetězec ve skriptu bash

  1. Převeďte textový řetězec v bash na pole

  2. Co dělá 'bash -c'?

  3. bash - vyhledá pozici indexu řetězce podřetězce

  1. Použití odkazu na proměnnou bashového řetězce v Sed?

  2. Jak číst řetězec jako hexadecimální číslo v Bash?

  3. Jak rozdělit řetězec ve skriptu Bash