BASH: Žolíkové znaky: Porovnání verzí

Z Milan Kerslager
Přejít na: navigace, hledání
m (Příklady: fix)
(Příklady: upřesnění)
Řádka 64: Řádka 64:
 
  echo na strejdu >> text.txt
 
  echo na strejdu >> text.txt
  
Většina programů považuje za svůj standardní vstup soubory, které jsou předány na příkazovém řádku jako parametry. Některé programy však toto vylepšení nemají implementováno a vždy předpokládají vstup na standardním vstupu. V následujícím příkladu je nejprve vytvořen soubor <code>text.txt</code> se dvěma řádky a pomocí příkazu <code>hexdump</code> je provedena inspekce jeho obsahu. Přechod na nový řádek je zajištěn tak, že u příkazu <code>echo</code> způsobí přepínač <code>-e</code> interpretaci sekvence <code>\n</code> v tištěném řetězci jako přechod na nový řádek. Všimněte si, že znak konce řádku je ve výsledném unixovém souboru zaznamenán jako řídící znak LF (hexadecimálně <code>0x0A</code>). Následně je soubor <code>text.txt</code> převeden do formátu DOS/WINDOWS příkazem <code>unix2dos</code> a zaznamenán do souboru <code>dos.txt</code>. V něm jsou na konci řádku používány znaky CR/LF (<code>0x0D</code>, <code>0x0A</code>), jak dokládá jeho opětovná analýza příkazem <code>hexdump</code>. V příkladu je tučně zvýrazněn vstup od uživatele a znak $ (dolar) reprezentuje výzvu shellu (prompt).
+
Většina programů považuje za svůj standardní vstup soubory, které jsou předány na příkazovém řádku jako parametry. Některé programy však toto vylepšení nemají implementováno a vždy předpokládají vstup na standardním vstupu. V následujícím příkladu je nejprve vytvořen soubor <code>text.txt</code> se dvěma řádky tak, že u příkazu <code>echo</code> je použit přepínač <code>-e</code>, který způsobí v tištěném řetězci interpretaci sekvence <code>\n</code> jako přechod na nový řádek. Následně je soubor <code>text.txt</code> převeden do formátu DOS/WINDOWS příkazem <code>unix2dos</code> a zaznamenán do souboru <code>dos.txt</code>.
 +
 
 +
/bin/echo -e "prvni\ndruhy" > text.txt
 +
unix2dos < text.txt > dos.txt
 +
 
 +
Pomocí příkazu <code>hexdump</code> je možné provést inspekci obou souborů a zjistit, že v unixovém souboru <code>text.txt</code> je zaznamenán řídící znak LF (hexadecimálně <code>0x0A</code>) a v převedeném souboru <code>dos.txt</code> je ve formátu DOS/WINDOWS používána sekvence CR/LF (<code>0x0D</code>, <code>0x0A</code>). V příkladu je tučně zvýrazněn vstup od uživatele a znak $ (dolar) reprezentuje výzvu shellu (prompt):
  
$ '''/bin/echo -e "prvni\ndruhy" > text.txt'''
 
 
  $ '''hexdump -C text.txt'''
 
  $ '''hexdump -C text.txt'''
 
  00000000  70 72 76 6e 69 0a 64 72  75 68 79 0a              |prvni.druhy.|
 
  00000000  70 72 76 6e 69 0a 64 72  75 68 79 0a              |prvni.druhy.|
 
  0000000c
 
  0000000c
$ '''unix2dos < text.txt > dos.txt'''
 
 
  $ '''hexdump -C dos.txt'''
 
  $ '''hexdump -C dos.txt'''
 
  00000000  70 72 76 6e 69 0d 0a 64  72 75 68 79 0d 0a        |prvni..druhy..|
 
  00000000  70 72 76 6e 69 0d 0a 64  72 75 68 79 0d 0a        |prvni..druhy..|

Verze z 19. 10. 2009, 07:09

Žolíkové znaky, přesměrování a kolony jsou základním nástrojem, pomocí kterého se z příkazového řádku stává mocný a výkonný nástroj. Základní příkazy Unixu je možné používat flexibilně, kombinovat jejich schopnosti a spojovat je jich schopnosti do větších celků.

Žolíkové znaky

Žolíkové znaky slouží k tomu, aby nebylo nutné uvádět všechny parametry příkazy explicitně, ale bylo možné použít obecné zadání. Lze například pracovat se všemi soubory s příponou txt nebo se všemi, které vyhovují jiným podmínkám (začínají na určité znaky, obsahují slovo atd.).

Konstrukce Funkce
* Jakékoliv znaky (i žádný znak)
? Jakýkoliv právě jeden znak
[abc] Jeden z uvedených znaků (zde a, b nebo c)
[^abc] Žádný z uvedených znaků (cokoliv kromě a, b nebo c)
 {slovo1,slovo2}  Jedno z uvedených slov (zde slovo1 nebo slovo2)

Příklady

ls /bin/*sh           # vypíše z adresáře /bin vše, co končí na sh 
ls *{txt,doc}         # vypíše v aktuálním adresáři vše končící na .txt nebo .doc
ls /bin/[bcd]*        # vypíše z adresáře /bin vše začínající na b, c nebo d
ls -d /etc/[ab]*      # vypíše z adresáře /etc vše začínající na a nebo b
ls /bin/[^abc]*       # vypíše z adresáře /bin vše, co nezačíná na a, b nebo c
ls /{bin,sbin}/c*     # vypíše z adresářů /bin a /sbin vše, co začíná na c
ls /{,s}bin/c*        # vypíše z adresářů /bin a /sbin vše, co začíná na c

Přesměrování

Konstrukce Funkce
> Přesměrování standardního výstupu (vytvoří nebo přemaže existující soubor)
>> Přesměrování standardního výstupu (vytvoří nebo přidá za konec existujícího souboru)
< Přesměrování standardního vstupu
2>&1 Spojení standardního chybového výstupu se standardním výstupem
2> Přesměrování do standardního chybového výstupu
<<MARK Here document

Příklady

Při přesměrování standardního výstupu pomocí znaku > je existující soubor přepsán. Jestliže soubor neexistuje, je vytvořen. Přesměrování pomocí >> přidává za konec existujícího souboru. Pokud soubor neexistuje, je vytvořen.

ls /bin > text.txt
echo kuk > text.txt
echo na strejdu >> text.txt

Většina programů považuje za svůj standardní vstup soubory, které jsou předány na příkazovém řádku jako parametry. Některé programy však toto vylepšení nemají implementováno a vždy předpokládají vstup na standardním vstupu. V následujícím příkladu je nejprve vytvořen soubor text.txt se dvěma řádky tak, že u příkazu echo je použit přepínač -e, který způsobí v tištěném řetězci interpretaci sekvence \n jako přechod na nový řádek. Následně je soubor text.txt převeden do formátu DOS/WINDOWS příkazem unix2dos a zaznamenán do souboru dos.txt.

/bin/echo -e "prvni\ndruhy" > text.txt
unix2dos < text.txt > dos.txt

Pomocí příkazu hexdump je možné provést inspekci obou souborů a zjistit, že v unixovém souboru text.txt je zaznamenán řídící znak LF (hexadecimálně 0x0A) a v převedeném souboru dos.txt je ve formátu DOS/WINDOWS používána sekvence CR/LF (0x0D, 0x0A). V příkladu je tučně zvýrazněn vstup od uživatele a znak $ (dolar) reprezentuje výzvu shellu (prompt):

$ hexdump -C text.txt
00000000  70 72 76 6e 69 0a 64 72  75 68 79 0a              |prvni.druhy.|
0000000c
$ hexdump -C dos.txt
00000000  70 72 76 6e 69 0d 0a 64  72 75 68 79 0d 0a        |prvni..druhy..|
0000000e

Kolona

Konstrukce Funkce
| Vytvoření roury

Příklady