Crmgo Blog

Čtení řádků z souborů

Čtení řádků z souborů

Příklad 1: Výpis určitých řádků podle jejich čísel pomocí příkazu sed. Příkaz umožňuje zobrazit pouze požadované řádky s konkrétními čísly, která jsou explicitně uvedena. Syntaxe: $ sed -n -e 'Xp' -e 'Yp' FILENAME sed: příkaz, …

Čtení řádků z souborů

Příklad 1: Výpis určitých řádků podle jejich čísel pomocí příkazu sed

Příkaz umožňuje zobrazit pouze požadované řádky s určitými čísly, která jsou explicitně zadána.

Syntaxe:

  1. $ sed -n -e Xp -e Yp FILENAME

 

sed: příkaz, který ve výchozím nastavení vypisuje všechny řádky bez výjimky -n: potlačení výstupu -e CMD: prováděný příkaz Xp: výpis řádku s číslem X Yp: výpis řádku s číslem Y FILENAME: název zpracovávaného souboru

V níže uvedeném příkladu jsou vypisovány řádky 120, 145 a 1050 souboru syslog.

  1. $ sed -n -e 120p -e 145p -e 1050p /var/log/syslog

V dalším příkladu můžete zobrazit obsah souboru /var/log/cron od řádku číslo 101 do řádku číslo 110.

M – počáteční řádek N – koncový řádek

Syntaxe:

  1. sed -n M,Np FILENAME

 

  1. $ sed -n 101,110p /var/log/cron

Příklad 2: Výpis prvních N řádků souboru pomocí příkazu head

V tomto příkladu jsou vypisovány prvních 15 řádků souboru /var/log/maillog.

Syntaxe:

  1. head -n N FILENAME

 

  1. $ head -n 15 /var/log/maillog

Chcete-li vypsat prvních 10 řádků protokolu, změňte v příkladu číslo 15 na 10.

Příklad 3: Nevypisování posledních N řádků souboru pomocí příkazu head

Tento příklad ukazuje, jak ignorovat posledních N řádků a zobrazit pouze zbývající řádky od začátku souboru.

Syntaxe:

  1. head -n -N FILENAME

Příklad ukazuje, jak lze vypsat všechny řádky souboru /var/log/secure kromě posledních 250.

  1. $ head -n -250 /var/log/secure

Příklad 4: Výpis posledních N řádků souboru pomocí příkazu tail

Syntaxe: tail -n N FILENAME

V tomto příkladu se vypíšou pouze posledních 50 řádků souboru /var/log/messages. Chcete-li na obrazovku vypsat posledních 100 řádků protokolu, změňte 50 na 100.

  1. $ tail -n 50 /var/log/messages

Příklad 5: Nepřepisování prvních N-1 řádků souboru pomocí příkazu tail

Tímto příkazem lze ignorovat prvních N-1 řádků a zobrazit pouze zbývající řádky.

Syntaxe:

  1. tail -n +N FILENAME

Tento příklad ukazuje, jak ignorovat prvních 4 řádky souboru /etc/xinetd.conf, který obsahuje pouze komentáře.

  1. $ tail -n +5 /etc/xinetd.conf
  2. defaults
  3. {
  4. instances = 60
  5. log_type = SYSLOG authpriv
  6. log_on_success = HOST PID
  7. log_on_failure = HOST
  8. cps = 25 30
  9. }
  10. includedir /etc/xinetd.d

Příklad 6: Sledování rostoucího protokolu v reálném čase pomocí příkazu tail

Pravděpodobně jde o jednu z nejčastěji používaných příkazů správci systémů. Pro zobrazení rostoucího souboru a výstup pouze aktualizovaného obsahu protokolu použijte příkaz tail -f, jak je ukázáno níže.

V následujícím příkladu se v reálném čase zobrazuje obsah souboru /var/log/syslog.

Syntaxe:

  1. tail -f FILENAME

 

  1. $ tail -f /var/log/syslog

Příklad 7: Výstup určitých řádků (podle čísla řádku) pomocí příkazů head a tail

M – počáteční řádek N – koncový řádek

Syntaxe:

  1. cat file | tail -n +N | head -n (M-N+1)

V níže uvedeném příkladu se zobrazují řádky 101 – 110 souboru /var/log/anaconda.log

  1. $ cat /var/log/anaconda.log | tail -n +101 | head -n 10

 

cat : vypíše celý soubor do stdout. tail -n +101 : ignoruje řádky až do uvedeného čísla, poté začne vypisovat řádky od tohoto čísla. head -n 10 : vypíše prvních 10 řádků, tj. od 101 do 110, zbylé ignoruje.

Příklad 8: Výstup řádků odpovídajících vzoru a několika následujících řádků.

Následující příklad ukazuje, jak vypsat řádky odpovídající vzoru „Initializing CPU“ ze souboru /var/log/dmesg, a také 5 řádků, které bezprostředně následují.

  1. # grep "Initializing CPU#1" /var/log/dmesg
  2. Initializing CPU#1

[Poznámka: tento příkaz vypíše pouze řádky odpovídající vzoru]

  1. # grep -A 5 "Initializing CPU#1" dmesg
  2. Initializing CPU#1
  3. Calibrating delay using timer specific routine.. 3989.96 BogoMIPS (lpj=1994982)
  4. CPU: After generic identify, caps: bfebfbff 20100000 00000000 00000000
  5. CPU: After vendor identify, caps: bfebfbff 20100000 00000000 00000000
  6. monitor/mwait feature present.
  7. CPU: L1 I cache: 32K, L1 D cache: 32K

[Pozor: tento příkaz vypíše řádek, který odpovídá, a 5 řádků za ním]

Pro příkaz grep jsou k dispozici následující operace:

Zobrazení řádků odpovídajících vzoru – základní funkce příkazu grep. Zobrazení pouze vybraných znaků. Zobrazení N řádků po shodě pomocí argumentu -A. Zobrazení N řádků před shodou pomocí argumentu -B. Zobrazení N řádků před i po shodě pomocí argumentu -C.

Příklad 9: Výstup určitých bajtů ze souboru.

Následující příklad ukazuje, jak vypsat buď prvních 40, nebo posledních 30 bajtů souboru.
Výstup prvních 40 bajtů souboru syslog.

  1. $ head -c40 /var/log/syslog

Výstup posledních 30 bajtů souboru syslog.

  1. $ tail -c30 /var/log/syslog

Příklad 10: Zobrazení komprimovaných logů.

Pravidelně jsou všechny systémové logy komprimovány. Můžete je „za chodu“ rozbalit a zpracovat výsledek pomocí jiného příkazu. Jak na to, je ukázáno níže.

Výstup prvních N řádků komprimovaného souboru.

  1. $ zcat file.gz | head -250

Zobrazení posledních N řádků ze komprimovaného souboru.

  1. $ zcat file.gz | tail -250

Ignorování posledních N řádků ze komprimovaného souboru.

  1. $ zcat file.gz | head -n -250

Ignorování prvních N řádků ze komprimovaného souboru.

  1. $ zcat file.gz | tail -n +250

Zobrazení řádků odpovídajících vzoru

  1. $ zcat file.gz | grep -A2 'error'

Zobrazení sady řádků podle zadaného rozsahu jejich čísel.

  1. $ zcat file.gz | sed -n -e 45p -e 52p

Poznámka: příspěvek mohl vzniknout s pomocí AI a lidskou redakcí. Odpovědný: Dmytro Lomaka, Kaltenkirchen.