GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Unix-Sed-Tutorial:6 Beispiele für Sed-Verzweigungsoperationen

Dieser Artikel ist Teil der fortlaufenden Serie Unix Sed Tipps und Tricks.

Wie jede andere Programmiersprache bietet auch sed spezielle Verzweigungsbefehle zur Steuerung des Programmflusses.

Lassen Sie uns in diesem Artikel die folgenden zwei Arten von Sed-Verzweigungen besprechen.

  1. Sed Unconditional Branch
  2. Bedingter Sed-Zweig

Sed unbedingte Verzweigungssyntax:

$ sed ':label command(s) b label'
  • :label – Spezifikation des Labels.
  • Befehle – Alle sed-Befehle
  • label – Beliebiger Name für das Label
  • b-Label – springt zum Label, ohne irgendwelche Bedingungen zu prüfen. Wenn Label nicht angegeben ist, springt zum Ende des Skripts.

Sed-bedingte Verzweigungssyntax:

$ sed ':label command(s) t label'
  • :label – Spezifikation des Labels.
  • Befehle – Alle sed-Befehle
  • label – Beliebiger Name für das Label
  • t-Label – springt nur dann zum Label, wenn der letzte Ersatzbefehl den Musterbereich geändert hat. Wenn Label nicht angegeben ist, springt zum Ende des Skripts.

Erstellen Sie eine Beispieltestdatei

Lassen Sie uns zuerst die Datei thegeekstuff.txt erstellen, die in den unten erwähnten Beispielen verwendet wird.

$ cat thegeekstuff.txt
Linux
        Administration
        Scripting
                Tips and Tricks
Windows
        Administration
Database
        Administration of Oracle
        Administration of Mysql
Security
        Network
                 Online\
        Security
Productivity
        Google Search\
        Tips
        "Web Based Time Tracking,
        Web Based Todo list and
        Reduce Key Stores etc"
$

Ich. Sed-Beispiele für unbedingte Verzweigung

Sed Beispiel 1. Ersetzen Sie das erste Vorkommen eines Musters in einer ganzen Datei

Ersetzen Sie in der Datei thegeekstuff.txt das erste Vorkommen von „Administration“ durch „Supervision“.

$ sed '/Administration/{
 s/Administration/Supervision/
 :loop
 n
 b loop
 }' thegeekstuff.txt
Linux
	Supervision
        Scripting
                Tips and Tricks
Windows
        Administration
Database
        Administration of Oracle
        Administration of Mysql
Security
        Network
                 Online\
        Security
Productivity
        Google Search\
        Tips
        "Web Based Time Tracking,
        Web Based Todo list and
        Reduce Key Stores etc"
  1. Im obigen sed-Befehl wird nur Zeile für Zeile gelesen und der Musterbereich ausgegeben, bis die Administration erfolgt.
  2. Sobald die Verabreichung erfolgt, ersetzen Sie die Verabreichung durch die Überwachung (nur einmaliges Auftreten, beachten Sie, dass kein „g“-Flag bei der Substitution vorhanden ist).
  3. Sobald das erste Vorkommen ersetzt wurde, lesen Sie einfach den restlichen Dateiinhalt und drucken Sie.
    • „n“ ist ein sed-Befehl, der den Musterbereich ausgibt und mit der nächsten Zeile überschreibt.
    • Verwendet „Schleife“ als Bezeichnung. „n“ druckt die aktuelle Zeile und überschreibt den Musterbereich mit der nächsten Zeile. b loop springt wieder zur :loop. Diese Schleife gibt also den restlichen Inhalt von thegeekstuff.txt aus.

Sed Beispiel 2. Entfernen Sie die Daten zwischen dem Muster „ “ in einer ganzen Datei

In unserer Beispieldatei stehen drei Zeilen zwischen „“.

sed -e ':loop
$!{
N
/\n$/!b loop
}
s/\"[^\"]*\"//g' thegeekstuff.txt
Linux
        Administration
        Scripting
                Tips and Tricks
Windows
        Administration
Database
        Administration of Oracle
        Administration of Mysql
Security
        Network
                 Online\
        Security
Productivity
        Google Search\
        Tips
$
  1. Der obige Befehl keep hängt alle Zeilen einer Datei an, bis das Dateiende erreicht ist.
    • $! – Wenn es kein Dateiende ist.
    • N – Fügt die nächste Zeile mit dem durch \n begrenzten Musterraum an
    • /\n$/!b Schleife – Wenn dies nicht die letzte Zeile der Datei ist, springe erneut zur Schleife.
  2. Nun sind alle Zeilen im durch Zeilenumbruch begrenzten Musterbereich verfügbar. Ersetzen Sie alle Vorkommen von Daten zwischen ” durch das Leerzeichen.

Sed-Beispiel 3. Entfernen Sie die HTML-Tags einer Datei

Nehmen wir an, ich habe eine Datei mit folgendem HTML-Inhalt

$ cat index.html
<html><body>
<table
border=2><tr><td valign=top
align=right>1.</td>
<td>Line 1 Column 2</
td>
</table>
</body></html>

Der folgende sed-Befehl entfernt alle HTML-Tags aus der angegebenen Datei

$ sed '/</{
:loop
s/<[^<]*>//g
/</{
N
b loop
}
}' index.html

1.
Line 1 Column 2
  1. Jedes Mal, wenn eine Zeile „<“ enthält, entfernen Sie zuerst alle HTML-Tags dieser Zeile.
  2. Wenn nun der Musterbereich ‚<‘ enthält, impliziert dies ein mehrzeiliges Tag. Wiederholen Sie nun die folgende Schleife:
    • Nächste Zeile beitreten
    • Entfernen Sie alle HTML-Tags, bis kein einzelnes „<“ mehr vorhanden ist
  3. Wenn kein „<“ im Musterbereich vorhanden ist, drucken wir es aus und beginnen einen neuen Zyklus.

II. Sed-Beispiele für bedingte Verzweigung

Sed Beispiel 4. Wenn eine Zeile mit einem Backslash endet, hänge die nächste Zeile daran an.

Unsere Beispieldatei hat zwei Zeilen, die mit einem Backslash enden, jetzt müssen wir die nächste Zeile daran anhängen.

$ sed '
:loop
/\\$/N
s/\\\n */ /
t loop' thegeekstuff.txt
Linux
        Administration
        Scripting
                Tips and Tricks
Windows
        Administration
Database
        Administration of Oracle
        Administration of Mysql
Security
        Network
                 Online Security
Productivity
        Google Search Tips
        "Web Based Time Tracking,
        Web Based Todo list and
        Reduce Key Stores etc"
  1. Überprüfen Sie, ob die Zeile mit dem Backslash (/\\$/) endet, wenn ja, lesen Sie die nächste Zeile und fügen Sie sie an das Leerzeichen des Musters an, und ersetzen Sie das \ am Ende der Zeile und die Anzahl der Leerzeichen, gefolgt von diesem, mit dem einzigen Leerzeichen.
  2. Wenn die Ersetzung erfolgreich ist, wiederholen Sie den obigen Schritt. Die Verzweigung wird nur ausgeführt, wenn die Substitution erfolgreich ist.
  3. Bedingte Verzweigung, die hauptsächlich für rekursive Muster verwendet wird.

Sed Beispiel 5. Kommifizieren Sie eine numerische Zeichenkette.

 sed '
 :loop
 s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/
 t loop'
12342342342343434
12,342,342,342,343,434
  1. Gruppieren Sie die Ziffern in zwei Gruppen.
  2. Die erste Gruppe umfasst alle Ziffern bis zu den letzten drei Ziffern. Die letzten drei Ziffern werden in der 2. Gruppe erfasst.
  3. Dann werden die beiden übereinstimmenden Gruppen durch ein Komma getrennt. Dann werden die gleichen Regeln immer wieder auf die Linie angewendet, bis alle Zahlen in Dreiergruppen gruppiert sind.
  4. In der ersten Iteration ist es beispielsweise 12342342342343.434
  5. In der nächsten Iteration 12342342342.343.434 und geht weiter, bis weniger als drei Ziffern vorhanden sind.

Sed Beispiel 6. Formatierung:Ersetzen Sie jedes führende Leerzeichen einer Zeile durch „+“

$ sed '
s/^ */&\n/
:loop
s/^\n//;s/ \n/\n+/
t loop' test
Linux
++++++++Administration
++++++++Scripting
++++++++++++++++Tips and Tricks
Windows
++++++++Administration
Database
++++++++Administration of Oracle
++++++++Administration of Mysql
Security
++++++++Network
+++++++++++++++++Online\
++++++++Security
Productivity
++++++++Google Search\
++++++++Tips
++++++++"Web Based Time Tracking,
++++++++Web Based Todo list and
++++++++Reduce Key Stores etc"
  1. Trennen Sie alle führenden Leerzeichen und andere Zeichen einer Zeile mit einem Zeilenumbruchzeichen.
  2. Ersetzen Sie jetzt Leerzeichen und Zeilenumbruch durch Zeilenumbruch und +. Das Leerzeichen von rechts nach links wird also durch + ersetzt und der Zeilenumbruch wird um ein Zeichen nach links verschoben.
  3. Zuletzt am Anfang der Zeile wird \n da sein, also entferne diese neue Zeile.

Linux
  1. Linux-CD-Befehls-Tutorial für Anfänger (8 Beispiele)

  2. Linux-Kommando-Tutorial für Anfänger (5 Beispiele)

  3. Linux-df-Befehls-Tutorial für Anfänger (8 Beispiele)

  4. Linux Date Command Tutorial für Anfänger (8 Beispiele)

  5. Linux du Command Tutorial für Anfänger (10 Beispiele)

Linux w Command Tutorial für Anfänger (5 Beispiele)

Linux ss Command Tutorial für Anfänger (8 Beispiele)

Regex-Tutorial für Linux-Beispiele (Sed &AWK).

Unix-Sed-Tutorial:Fortgeschrittene Sed-Ersetzungsbeispiele

Unix Sed Tutorial:7 Beispiele für Sed Hold und Pattern Buffer Operationen

Unix Sed Tutorial:Mehrzeilige Dateioperation mit 6 praktischen Beispielen