GNU/Linux >> Znalost Linux >  >> Linux

Unix Sed Výuka:Tisk řádků souboru pomocí adresy a vzorů

Podívejme se, jak tisknout řádky souboru pomocí adresy a vzorů v této první části sed tutoriálu.

V nadcházejících týdnech zveřejníme několik úžasných sed tutoriálů s příklady.

Úvod do systému Unix Sed

  • sed je „neinteraktivní“ streamově orientovaný editor. Vzhledem k tomu, že je „neinteraktivní“, lze jej v případě potřeby použít k automatizaci úprav.
  • Název sed je zkratka pro stream editor a nástroj odvozuje mnoho svých příkazů z ed line-editor (ed byl první textový editor UNIX).
  • To vám umožňuje upravovat více souborů nebo provádět běžné operace úprav, aniž byste museli otevírat vi nebo emacs.
  • sed čte ze souboru nebo ze svého standardního vstupu a vystupuje na standardní výstup.
  • sed má dva buffery, které se nazývají vzorový buffer a hold buffer. Oba jsou zpočátku prázdné.

Pracovní metodologie Unix Sed

Toto se nazývá jeden prováděcí cyklus. Cyklus pokračuje, dokud není dosaženo konce souboru/vstupu.

  1. Přečtěte si celý řádek ze stdin/souboru.
  2. Odebere veškerý nový řádek na konci.
  3. Umístí čáru do její vyrovnávací paměti.
  4. Upravte vyrovnávací paměť vzorů podle dodaných příkazů.
  5. Vytiskněte vyrovnávací paměť vzorů na stdout.

Operace tisku v Sed

Příkaz Linux Sed vám umožňuje tisknout pouze konkrétní řádky na základě čísla řádků nebo shod se vzorem. „p“ je příkaz pro tisk dat z vyrovnávací paměti vzorů.

Chcete-li potlačit automatický tisk vzorového prostoru, použijte příkaz -n se sed. Volba sed -n nic nevytiskne, pokud nebude nalezen explicitní požadavek na tisk.

Syntax:
# sed -n 'ADDRESS'p filename

# sed -n '/PATTERN/p' filename

Nejprve vytvořte soubor geekstuff.txt, který bude použit ve všech níže uvedených příkladech.

# cat thegeekstuff.txt
1. Linux - Sysadmin, Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Hardware
4. Security (Firewall, Network, Online Security etc)
5. Storage
6. Cool gadgets and websites
7. Productivity (Too many technologies to explore, not much time available)
8. Website Design
9. Software Development
10.Windows- Sysadmin, reboot etc.

Příklady formátu 5 Sed ADDRESS

Formát adresy 1:NUMBER

To bude odpovídat pouze N-tému řádku ve vstupu.

# sed -n ‘N’p název_souboru

Například 3p vytiskne třetí řádek vstupního souboru thegeekstuff.txt, jak je znázorněno níže.

# sed -n '3'p thegeekstuff.txt
3. Hardware

Formát adresy 2:NUMBER1~NUMBER2

M~N s příkazem „p“ vytiskne každý N-tý řádek počínaje řádkem M.

# sed -n ‘M~N’p název_souboru

Například 3~2p vytiskne každý 2. řádek počínaje 3. řádkem, jak je znázorněno níže.

# sed -n '3~2'p thegeekstuff.txt
3. Hardware
5. Storage
7. Productivity (Too many technologies to explore, not much time available)
9. Software Development

Formát adresy Sed 3:START,END

M,N s příkazem „p“ vytiskne M-tý řádek na N-tý řádek.

# sed -n ‘M,N’p název_souboru

Například 4,8p vytiskne od 4. řádku do 8. řádku ze vstupního souboru thegeekstuff.txt

# sed -n '4,8'p thegeekstuff.txt
4. Security (Firewall, Network, Online Security etc)
5. Storage
6. Cool gadgets and websites
7. Productivity (Too many technologies to explore, not much time available)
8. Website Design

Formát adresy 4:„$“ poslední řádek

$ s příkazem „p“ odpovídá pouze poslednímu řádku ze vstupu.

# sed -n ‘$’p název_souboru

Například $p vytiskne pouze poslední řádek, jak je znázorněno níže.

# sed -n '$'p thegeekstuff.txt
10.Windows- Sysadmin, reboot etc.

Formát adresy 5:NUMBER, $

N,$ s příkazem „p“ se vytiskne od N-tého řádku do konce souboru.

# sed -n ‚N,$p‘ název_souboru

Například 4,$p se vytiskne od 4. řádku do konce souboru.

# sed -n '4,$p' thegeekstuff.txt
4. Security (Firewall, Network, Online Security etc)
5. Storage
6. Cool gadgets and websites
7. Productivity (Too many technologies to explore, not much time available)
8. Website Design
9. Software Development
10.Windows- Sysadmin, reboot etc.

Příklady formátu 6 Sed PATTERN

Formát vzoru 1:VZOR

PATTERN může být unixový regulární výraz. Níže uvedený příkaz vytiskne pouze řádek, který odpovídá danému vzoru.

# sed -n /PATTERN/p název_souboru

Například následující vytiskne pouze řádek, který odpovídá vzoru „Sysadmin“.

# sed -n /Sysadmin/p thegeekstuff.txt
1. Linux - Sysadmin, Scripting etc.
10.Windows- Sysadmin, reboot etc.

Formát vzoru 2:/VZOR/,ADRESA


# sed -n ‘/PATTERN/,Np’ název souboru

Například následující vytiskne řádky, které odpovídají vzoru N-tému řádku ze vstupu. 3. řádek odpovídá vzoru „Hardware“, takže se tiskne od 3. řádku do 6. řádku.

# sed -n '/Hardware/,6p' thegeekstuff.txt
3. Hardware
4. Security (Firewall, Network, Online Security etc)
5. Storage
6. Cool gadgets and websites

Sed Pattern Format 3:ADDRESS,/PATTERN/

Tiskne se od N-tého řádku vstupu k řádku, který odpovídá vzoru. Pokud se vzor neshoduje, vytiskne se až do konce vstupu.

# sed -n ‚N,/PATTERN/p‘ název_souboru

Například 4. řádek odpovídá vzoru „Zabezpečení“, takže se tiskne od 3. řádku do 4. řádku.

# sed -n '3,/Security/p' thegeekstuff.txt
3. Hardware
4. Security (Firewall, Network, Online Security etc)

Formát vzoru 4:/PATTERN/,$

Vytiskne se od řádku, který odpovídá danému vzoru, po konec souboru.

# sed -n ‘/PATTERN/,$p’ název_souboru

# sed -n '/Website/,$p' thegeekstuff.txt
8. Website Design
9. Software Development
10.Windows- Sysadmin, reboot etc.

Formát vzoru 5:/PATTERN/,+N

Vytiskne řádky, které odpovídají vzoru, a dalších N řádků po odpovídající řádce.

# sed -n ‘/PATTERN/,+Np’ název_souboru

Například následující vytiskne 5. řádek, který odpovídá vzoru /Storage/ a další dva řádky následující /Storage/.

# sed -n '/Storage/,+2p' thegeekstuff.txt
5. Storage
6. Cool gadgets and websites
7. Productivity (Too many technologies to explore, not much time available)

Sed Pattern Format 6:/PATTERN/,/PATTERN/

Vytiskne část souboru mezi dvěma regulárními výrazy (včetně shodného řádku ).

# sed -n ‘/P1/,/P2/p’ název_souboru

Například 5. řádek odpovídá „Storage“ a 8. řádek odpovídá „Design“, takže se vytiskne 5. až 8..

# sed -n '/Storage/,/Design/p' thegeekstuff.txt
5. Storage
6. Cool gadgets and websites
7. Productivity (Too many technologies to explore, not much time available)
8. Website Design

Linux
  1. Použití sed k nalezení a nahrazení textových souborů v Linuxu

  2. Tisknout čáry mezi (a vyjma) dvěma vzory?

  3. Tisknout čáry mezi (a včetně) dvěma vzory?

  1. Nahradit řádek jiným obsahem pomocí Sed And Parallel pro velký soubor?

  2. Jak počítat řádky v souboru v UNIX/Linux

  3. Najděte a nahraďte text v souboru mezi rozsahy řádků pomocí sed

  1. Extrahovat hodnotu mezi dvěma vyhledávacími vzory na stejném řádku?

  2. Odstranit řádek obsahující určitý řetězec a následující řádek?

  3. Jak vložím text do 1. řádku souboru pomocí sed?