Linux sed-Befehl

Linux 命令大全Vollständige Linux-Befehlsreferenz

Der Linux sed-Befehl verwendet Skripte, um Textdateien zu verarbeiten.

sed kann Textdateien gemäß den Skriptanweisungen verarbeiten und bearbeiten.

Sed wird hauptsächlich verwendet, um eine oder mehrere Dateien automatisch zu bearbeiten, wiederholte Operationen an Dateien zu vereinfachen, Konvertierungsprogramme zu schreiben usw.

Syntax

sed [-hnV][-e<script>][-f<script文件>][文本文件]

Parameterbeschreibung:

  • -e<script> oder --expression=<script> Verwenden Sie das in der Option angegebene Skript, um die Eingabetextdatei zu verarbeiten.
  • -f<script file> oder --file=<script file> Verwenden Sie die in der Option angegebene Skriptdatei, um die Eingabetextdatei zu verarbeiten.
  • -h oder --help Hilfe anzeigen.
  • -n oder --quiet oder --silent Nur das Ergebnis nach der Skriptverarbeitung anzeigen.
  • -V oder --version Zeigt Versionsinformationen an.

Aktionsbeschreibung:

  • a : Hinzufügen. Auf a können Zeichenketten folgen, und diese Zeichenketten erscheinen in einer neuen Zeile (die nächste Zeile nach der aktuellen)~
  • c : Ersetzen. Auf c können Zeichenketten folgen, und diese Zeichenketten können die Zeilen zwischen n1 und n2 ersetzen!
  • d : Löschen. Da es sich um Löschen handelt, folgt auf d normalerweise nichts;
  • i : Einfügen. Auf i können Zeichenketten folgen, und diese Zeichenketten erscheinen in einer neuen Zeile (der Zeile vor der aktuellen);
  • p : Ausgeben, d. h., die ausgewählten Daten ausgeben. Normalerweise wird p zusammen mit dem Parameter sed -n~ verwendet
  • s : Ersetzen. Es kann direkt eine Ersetzung durchführen! Normalerweise kann die Aktion s mit regulären Ausdrücken verwendet werden! Zum Beispiel 1,20s/old/new/g!

Beispiele

Erstellen wir zunächst einetestfile-Datei mit folgendem Inhalt:

$ cat testfile #查看testfile 中的内容  
HELLO LINUX!  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test 
Google
Taobao
Example
Tesetfile
Wiki

Intestfilefügen Sie eine Zeile nach der vierten Zeile der Datei hinzu und geben Sie das Ergebnis auf der Standardausgabe aus. Geben Sie an der Eingabeaufforderung folgenden Befehl ein:

sed -e 4a\newLine testfile 

Nach Verwendung des Befehlssedist die Ausgabe wie folgt:

$ sed -e 4a\newLine testfile 
HELLO LINUX!  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test 
newLine
Google
Taobao
Example
Tesetfile
Wiki

Zeilenweises Hinzufügen/Löschen

wirdtestfileden Inhalt auflisten und Zeilennummern ausgeben. Löschen Sie außerdem die Zeilen 2~5!

$ nl testfile | sed '2,5d'
     1  HELLO LINUX!  
     6  Taobao
     7  Example
     8  Tesetfile
     9  Wiki

Die Aktion von sed ist2,5d, dasdbedeutet Löschen. Da die Zeilen 2-5 gelöscht werden, enthält die angezeigte Ausgabe die Zeilen 2-5 nicht mehr. Außerdem sollten Sie ursprünglich sed -e verwenden, aber es funktioniert auch ohne -e. Beachten Sie außerdem, dass die Aktion sed umschlossen werden muss von'...'zwei einfachen Anführungszeichen!

Um nur Zeile 2 zu löschen:

$ nl testfile | sed '2d' 
     1  HELLO LINUX!  
     3  This is a linux testfile!  
     4  Linux test 
     5  Google
     6  Taobao
     7  Example
     8  Tesetfile
     9  Wiki

Um die Zeilen 3 bis zur letzten Zeile zu löschen:

$ nl testfile | sed '3,$d' 
     1  HELLO LINUX!  
     2  Linux is a free unix-type opterating system.  

Nach der zweiten Zeile (d. h. als dritte Zeile hinzugefügt), fügeTee trinken?den folgenden Text hinzu:

$ nl testfile | sed '2a drink tea'
     1  HELLO LINUX!  
     2  Linux is a free unix-type opterating system.  
drink tea
     3  This is a linux testfile!  
     4  Linux test 
     5  Google
     6  Taobao
     7  Example
     8  Tesetfile
     9  Wiki

Wenn du es vor der zweiten Zeile hinzufügen möchtest, lautet der Befehl wie folgt:

$ nl testfile | sed '2i drink tea' 
     1  HELLO LINUX!  
drink tea
     2  Linux is a free unix-type opterating system.  
     3  This is a linux testfile!  
     4  Linux test 
     5  Google
     6  Taobao
     7  Example
     8  Tesetfile
     9  Wiki

Wenn du mehr als zwei Zeilen hinzufügen möchtest, füge zwei Textzeilen nach der zweiten Zeile hinzu, zum BeispielTee trinken oder .....undBier trinken?

$ nl testfile | sed '2a Drink tea or ......\
drink beer ?'

1  HELLO LINUX!  
     2  Linux is a free unix-type opterating system.  
Drink tea or ......
drink beer ?
     3  This is a linux testfile!  
     4  Linux test 
     5  Google
     6  Taobao
     7  Example
     8  Tesetfile
     9  Wiki

Jede Zeile muss einen Backslash\verwenden, um eine neue Zeile zu markieren. Im obigen Beispiel können wir sehen, dass am Ende der ersten Zeile\vorhanden ist.

Ersetzen und Anzeigen nach Zeile

Ersetze den2-5 Inhalt der Zeile durchNr. 2-5?

$ nl testfile | sed '2,5c No 2-5 number'
     1  HELLO LINUX!  
No 2-5 number
     6  Taobao
     7  Example
     8  Tesetfile
     9  Wiki

Mit dieser Methode können wir eine gesamte Datenzeile ersetzen.

Nur die Zeilen 5-7 in testfile auflisten:

$ nl testfile | sed -n '5,7p'
     5  Google
     6  Taobao
     7  Example

Mit der zeilenbasierten Anzeigefunktion von sed können Sie bestimmte Zeilennummern innerhalb einer Datei auswählen und anzeigen.

Daten suchen und anzeigen

Suche in testfile nach Zeilen, dieooals Schlüsselwort enthalten:

$ nl testfile | sed -n '/oo/p'
     5  Google
     7  Example

Wenn root gefunden wird, wird zusätzlich zur Ausgabe aller Zeilen auch die übereinstimmende Zeile ausgegeben.

Daten suchen und löschen

Lösche alle Zeilen in testfile, dieooenthalten, und gib die übrigen Zeilen aus

$ nl testfile | sed  '/oo/d'
     1  HELLO LINUX!  
     2  Linux is a free unix-type opterating system.  
     3  This is a linux testfile!  
     4  Linux test 
     6  Taobao
     8  Tesetfile
     9  Wiki

Daten suchen und Befehle ausführen

Durchsuche testfile, findeoodie entsprechende Zeile, führe eine Reihe von Befehlen in den geschweiften Klammern aus, wobei jeder Befehl durch Semikolons getrennt ist. Hier wirdoodurchkk ersetzt, dann diese Zeile ausgeben:

$ nl testfile | sed -n '/oo/{s/oo/kk/;p;q}'  
     5  Gkkgle

Das abschließendeqdient zum Beenden.

Daten suchen und ersetzen

Zusätzlich zum Ganzzeilenverarbeitungsmodus kann sed auch partielle Daten zeilenweise suchen und ersetzen.

Das Suchen und Ersetzen von sed ähnelt demviBefehl, und das Syntaxformat lautet wie folgt:

sed 's/要被取代的字串/新的字串/g'
Ersetze das erste Vorkommen von oo in jeder Zeile von testfile durch die Zeichenkette kk und gib dann den Dateiinhalt auf der Standardausgabe aus:
sed -e 's/oo/kk/' testfile

gDas g-Flag steht für globale Suche und Ersetzung, sodass sed alle übereinstimmenden Zeichenketten in der Datei ersetzt. Der geänderte Inhalt geht an die Standardausgabe und verändert die Originaldatei nicht:

sed -e 's/oo/kk/g' testfile

Optioniveranlasst sed, die Datei zu ändern:

sed -i 's/oo/kk/g' testfile

Verarbeiten Sie Dateien im aktuellen Verzeichnis, die mittest beginnen, stapelweise:

sed -i 's/oo/kk/g' ./test*

Als Nächstes verwenden wir /sbin/ifconfig, um die IP abzufragen:

$ /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
.....(以下省略).....

Die IP dieser Maschine ist 192.168.1.100.

Den Teil vor der IP löschen:

$ /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

Als Nächstes löschen Sie den verbleibenden Teil, d. h.:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0。

Den Teil nach der IP löschen:

$ /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
192.168.1.100

Bearbeitung an mehreren Punkten

Ein einzelner sed-Befehl, um Daten von Zeile 3 bis zum Ende von testfile zu löschen und HELLO durch EXAMPLE zu ersetzen:

$ nl testfile | sed -e '3,$d' -e 's/HELLO/EXAMPLE/'
     1  EXAMPLE LINUX!  
     2  Linux is a free unix-type opterating system.  

-e kennzeichnet die Bearbeitung an mehreren Punkten. Der erste Bearbeitungsbefehl löscht die Daten von Zeile 3 bis zum Ende von testfile, und der zweite Befehl sucht nach HELLO und ersetzt es durch EXAMPLE.

Direktes Ändern von Dateiinhalten (gefährliche Aktion)

sed kann Dateiinhalte direkt ändern, ohne Pipe-Befehle oder Datenstromumleitung zu verwenden! Da diese Aktion jedoch die Originaldatei direkt ändert, bitte nicht einfach mit Systemkonfiguration testen! Wir werden trotzdem die Datei regular_express.txt verwenden, um es auszuprobieren!

Der Inhalt der Datei regular_express.txt ist wie folgt:

$ cat regular_express.txt 
example.
google.
taobao.
facebook.
zhihu-
weibo-

Verwende sed, um das abschließende . jeder Zeile in regular_express.txt durch ! zu ersetzen

$ sed -i 's/\.$/\!/g' regular_express.txt
$ cat regular_express.txt 
example!
google!
taobao!
facebook!
zhihu-
weibo-
:q:q

Verwende sed, um direkt an die letzte Zeile von regular_express.txt hinzuzufügen:# This is a test:

$ sed -i '$a # This is a test' regular_express.txt
$ cat regular_express.txt 
example!
google!
taobao!
facebook!
zhihu-
weibo-
# This is a test

Da $ die letzte Zeile darstellt und die Aktion a das Hinzufügen bewirkt, wurde am Ende der Datei Folgendes hinzugefügt:# This is a test!

Die-iOption von sed kann Dateiinhalte direkt ändern, und diese Funktion ist sehr hilfreich! Wenn du beispielsweise eine Datei mit 1 Million Zeilen hast und etwas Text in Zeile 100 hinzufügen musst, könnte dich die Verwendung von vim in den Wahnsinn treiben! Denn die Datei ist zu groß! Was ist dann zu tun? Verwende einfach sed! Mit der direkten Änderungs-/Ersetzungsfunktion von sed musst du nicht einmal vim zum Bearbeiten verwenden!

Linux 命令大全Vollständige Linux-Befehlsreferenz

Andere Erweiterungen