GNU/Linux >> Znalost Linux >  >> Linux

Unix Sed výukový program:Najít a nahradit text uvnitř souboru pomocí RegEx

Tento článek je součástí probíhající série výukových programů Unix Sed. V předchozích článcích jsme diskutovali o operaci tisku sed a operaci odstranění sed.

V tomto článku si ukážeme, jak používat sed náhradní příkaz „s“.

Příkaz „s“ je pravděpodobně nejdůležitější v „sed“ a má mnoho různých možností.

Příkaz „s“ se pokusí porovnat prostor vzoru s dodaným REGEXP; pokud je shoda úspěšná, pak ta část prostoru vzoru, která byla shodná, je nahrazena REPLACEMENT.

Syntax:

#sed 'ADDRESSs/REGEXP/REPLACEMENT/FLAGS' filename
#sed 'PATTERNs/REGEXP/REPLACEMENT/FLAGS' filename
  • s je náhradní příkaz
  • / je oddělovač
  • REGEXP je regulární výraz ke shodě
  • REPLACEMENT je hodnota, kterou je třeba nahradit

VLAJKY mohou být kterékoli z následujících

  • g Nahraďte všechny instance REGEXP výrazem REPLACEMENT
  • n Může to být libovolné číslo, nahraďte n-tou instanci REGEXP výrazem REPLACEMENT.
  • p Pokud byla provedena náhrada, vytiskne prostor nového vzoru.
  • Přiřazuji REGEXP bez ohledu na velikost písmen.
  • w soubor Pokud byla provedena náhrada, zapište výsledek do daného souboru.
  • Můžeme použít různé oddělovače (jeden z @ %; :) místo /

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

$ cat thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

Podívejme se nyní na některé zajímavé příklady substituce.

1. Nahraďte slovo „Linux“ za „Linux-Unix“ pomocí sed s//

V níže uvedeném příkladu ve výstupním řádku „1. Linux-Unix Sysadmin, Linux Scripting atd.“ pouze první Linux je nahrazen Linux-Unix. Pokud nejsou zadány žádné příznaky, je nahrazena první shoda řádku.

$ sed 's/Linux/Linux-Unix/' thegeekstuff.txt
# Instruction Guides
1. Linux-Unix Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux-Unix
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

2. Nahraďte všechny vzhledy slova pomocí sed s//g

Níže uvedený příkaz sed nahradí všechny výskyty Linuxu na Linux-Unix pomocí globálního substitučního příznaku „g“.

$ sed 's/Linux/Linux-Unix/g' thegeekstuff.txt
# Instruction Guides
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux-Unix
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

3. Nahraďte pouze 2. výskyt slova pomocí sed s//2

V níže uvedeném příkladu ve výstupním řádku „1. Linux Sysadmin, Linux-Unix Scripting atd." pouze 2. výskyt Linuxu je nahrazen Linuxem-Unix.

$ sed 's/Linux/Linux-Unix/2' thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux-Unix Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

4. Zapište změny do souboru a vytiskněte změny pomocí sed s//gpw

Níže uvedený příklad má nahrazení třemi příznaky. Nahradí všechny výskyty Linuxu Linux-Unix a vypíše nahrazený výstup a zapíše totéž do daného souboru.

$ sed -n 's/Linux/Linux-Unix/gpw output' thegeekstuff.txt
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
4. Storage in Linux-Unix
$ cat output
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
4. Storage in Linux-Unix

5. Nahraďte pouze tehdy, když se čára shoduje se vzorem pomocí sed

Pokud se v tomto příkladu řádek shoduje se vzorem „-“, nahradí všechny znaky z „-“ prázdným.

$ sed '/\-/s/\-.*//g' thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux Scripting etc.
2. Databases
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows

6. Smazat posledních X počet znaků z každého řádku pomocí sed

Tento příklad sed odstraní poslední 3 znaky z každého řádku.

$ sed 's/...$//' thegeekstuff.txt
# Instruction Gui
1. Linux Sysadmin, Linux Scripting e
2. Databases - Oracle, mySQL e
3. Security (Firewall, Network, Online Security e
4. Storage in Li
5. Productivity (Too many technologies to explore, not much time availab
#  Additional F
6. Windows- Sysadmin, reboot e

7. Odstraňte komentáře pomocí sed

Odstraňte všechny řádky komentářů ze souboru, jak je ukázáno níže, pomocí příkazu sed.

$  sed -e 's/#.*//' thegeekstuff.txt

1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)

6. Windows- Sysadmin, reboot etc.

8. Odstraňte komentáře a prázdné řádky pomocí sed

V tomto příkladu jsou dva příkazy oddělené „;“

  • První příkaz nahradí řádky začínající znakem # prázdnými řádky
  • Druhý příkaz odstraní prázdné řádky.
$ sed -e 's/#.*//;/^$/d'  thegeekstuff.txt
1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
6. Windows- Sysadmin, reboot etc.

9. Převeďte nové řádky DOSu (CR/LF) do formátu Unix pomocí sed

Zkopírujte soubor DOS do Unixu, můžete najít \r\n na konci každého řádku.

Tento příklad převádí formát souboru DOS na formát souboru Unix pomocí příkazu sed.

$sed 's/.$//' filename

10. Odstraňte HTML tagy ze souboru pomocí sed

V tomto příkladu regulární výraz zadaný v příkazu sed odpovídá značkám html a nahradí se prázdným.

$ sed -e 's/<[^>]*>//g'
This <b> is </b> an <i>example</i>.
This  is  an example.

Linux
  1. Najít a nahradit ve skriptování shellu

  2. najít odpovídající text a nahradit další řádek

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

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

  2. Použití příkazů Sed,ex a perl k vyhledání a nahrazení textu v Linuxu

  3. Použití sed k nahrazení mezi konkrétním vzorem

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

  2. Pomocí „sed“ najít a nahradit?

  3. najít a zkopírovat soubor pomocí Bash