Latest web development tutorials

Linux Befehl sed

Linux-Befehl Daquan Linux - Befehl Daquan

Linux sed Befehl ist das Skript zu verwenden, um Text-Dateien zu verarbeiten.

sed-Skript kann mit den Anweisungen entsprechend zu handhaben sein, Bearbeiten von Textdateien.

Sed wird hauptsächlich verwendet, um automatisch eine oder mehrere Dateien zu bearbeiten, zu vereinfachen wiederholte Betätigung des Dokuments, schriftliche Umtauschverfahren.

Grammatik

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

Parameter Beschreibung:

  • -e <script> oder --expression = <script> im Skript mit der Option angegeben, die Eingabetextdatei zu verarbeiten.
  • -f <script file> oder --file = <script file> Option, um die Skriptdatei geben Sie die Eingabetextdatei zu verarbeiten.
  • Hilfe -h oder --help angezeigt.
  • -n oder --quiet oder --silent Skript zeigt die Ergebnisse nach nur Behandlung.
  • -V Oder --version Versionsnummer anzeigen.

Aktion Beschreibung:

  • a: neu, kann einen String zurücknehmen, und die Saiten werden (derzeit die nächste Zeile) auf einer neuen Zeile erscheinen -
  • c: ersetzen kann hinten c dann Zeichenfolge diese Strings können n1, n2 Linie zwischen ersetzen!
  • d: zu löschen, löschen, weil es ist ah, also in der Regel nicht akzeptieren jede später d Pfund;
  • i: Einsatz, kann ich die Zeichenfolge zurück, und die Saiten werden (vorhanden in einer Zeile) auf einer neuen Zeile;
  • p: Druck, die eine Auswahl der Druckdaten sein wird. P wird in der Regel mit dem Parameter laufen sed -n ~
  • s: Substitution kann die Arbeit direkt Meilen ersetzt werden! Normalerweise wird diese Klage kann mit regulären Ausdrücken verwendet werden! Zum Beispiel 1,20s / alt / neu / g ist es!

Beispiele

Nach der vierten Zeile Testdatei-Datei eine Zeile hinzufügen, und gibt die Ergebnisse an die Standardausgabe, geben Sie an der Eingabeaufforderung folgenden Befehl ein:

sed -e 4a\newLine testfile 

Prüfen Sie zunächst Testdatei Inhalte sind wie folgt:

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

Nach sed-Befehl verwenden, sind die Ausgabeergebnisse wie folgt:

$ sed -e 4a\newline testfile #使用sed 在第四行后添加新字符串  
HELLO LINUX! #testfile文件原有的内容  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test  
newline 

So fügen Sie Verhalten Einheiten / entfernen

Der Inhalt von / etc / passwd-Listen und Druckzeilennummern, während den ersten Satz 2-5 Zeilen gelöscht!

[root@www ~]# nl /etc/passwd | sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.....(后面省略).....

sed Aktion als "2,5D", dh die d zu entfernen! Da die Linien 2-5, ihn zu entfernen, so dass keine Daten auf der Linie 2-5 angezeigt Lo ~, auch zur Kenntnis nehmen, soll sed -e Fische freigegeben werden, wird kein -e es tun! Beachten Sie auch, dass die Rück sed take action, stellen Sie sicher, '' zwei einfache Anführungszeichen um Oh!

Löschen Sie einfach die zweite Reihe

nl /etc/passwd | sed '2d' 

Um den dritten bis zur letzten Zeile entfernen

nl /etc/passwd | sed '3,$d' 

Nach der zweiten Reihe (das heißt, hinzugefügt, um die dritte Reihe) plus "Tee trinken?" Worte!

[root@www ~]# nl /etc/passwd | sed '2a drink tea'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(后面省略).....

Aber wenn es vor der zweiten Reihe zu sein

nl /etc/passwd | sed '2i drink tea' 

Wenn Sie möchten, um mehr als zwei Reihen hinter der zweiten Reihe zu erhöhen zwei Linien zu verbinden, wie "Trinken Sie Tee oder ....." und "Bier trinken?"

[root@www ~]# nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer ?'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(后面省略).....

Muss ein Backslash "\" sein, eine neue Zeile zwischen jeder Reihe von Oh hinzuzufügen! Also, das obige Beispiel, wir die erste Zeile in der endgültigen Oberfläche finden können, gibt \ existieren.

Und die Einheiten der Anzeige zu ersetzen

Für den Inhalt der 2-5 Reihe Substitution "No 2-5 Zahl" bedeuten?

[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number'
1 root:x:0:0:root:/root:/bin/bash
No 2-5 number
6 sync:x:5:0:sync:/sbin:/bin/sync
.....(后面省略).....

Durch diese Methode können wir die ganze Reihe von Daten zu ersetzen!

Die erste Zeile enthält nur 5-7 / etc / passwd-Datei innerhalb

[root@www ~]# nl /etc/passwd | sed -n '5,7p'
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
</p><p>
可以透过这个 sed 的以行为单位的显示功能, 就能够将某一个文件内的某些行号选择出来显示。
</p>
<h3>数据的搜寻并显示</h3>
<p>搜索 /etc/passwd有root关键字的行</p>
<pre>
nl /etc/passwd | sed '/root/p'
1  root:x:0:0:root:/root:/bin/bash
1  root:x:0:0:root:/root:/bin/bash
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3  bin:x:2:2:bin:/bin:/bin/sh
4  sys:x:3:3:sys:/dev:/bin/sh
5  sync:x:4:65534:sync:/bin:/bin/sync
....下面忽略 

Wenn die Wurzel gefunden wird, zusätzlich zu allen Ausgangsleitungen, wird der Ausgang der Leitung entsprechen.

Bei der Verwendung von -n alle Zeilen drucken, die Vorlage.

nl /etc/passwd | sed -n '/root/p'
1  root:x:0:0:root:/root:/bin/bash

Suchen und Löschen von Daten

Gelöschte / etc / passwd Zeile enthält die Wurzel aller anderen Line-Ausgang

nl /etc/passwd | sed  '/root/d'
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3  bin:x:2:2:bin:/bin:/bin/sh
....下面忽略
#第一行的匹配root已经删除了

Suchdaten und Ausführen von Befehlen

Finden Sie ein passendes Muster östlichen Linie, die Suche / etc / passwd, finden Sie die Wurzel der entsprechenden Zeile, hinter der Umsetzung der Klammern in einer Reihe von Befehlen, die durch Semikolons zwischen jedem Befehl getrennt, hier zu bash ersetzen blueshell, Wiederausfuhr es line:

nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'
1  root:x:0:0:root:/root:/bin/blueshell

Q ist die letzte Ausfahrt.

Suchen und Ersetzen von Daten

Neben der gesamten Linie Verarbeitungsmodus, sed auch einige der Daten in Einheiten von Suchen und Ersetzen verwenden können. Vi ganz im Wesentlichen ähnlich sed suchen und ersetzt! Er ist ein bisschen wie folgt:

sed 's/要被取代的字串/新的字串/g'

Die erste Beobachtung der ursprünglichen Informationen, verwenden Sie / sbin / ifconfig Abfrage IP

[root@www ~]# /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
.....(以下省略).....

ip Diese Maschine ist 192.168.1.100.

Der vordere Teil des IP gelöscht werden

[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

Weiter ist es ein Teil des Follow-up zu löschen, und zwar: 192.168.1.100 Bcast: 192.168.1.255 Mask: 255.255.255.0

Der Teil der IP später gelöscht werden

[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
192.168.1.100

Multi-Edit

Ein sed Befehl, um die Datei / etc / passwd dritte Zeile an das Ende der Daten zu löschen und die Bash ersetzen blueshell

nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
1  root:x:0:0:root:/root:/bin/blueshell
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh

-e steht für Multi-Point-Bearbeitung, die ersten Bearbeitungsbefehl Löschungen / etc / passwd auf die Daten am Ende der dritten Zeile, die zweite Befehl sucht bash blueshell ersetzt.

Direkt ändern, den Inhalt der Datei (gefährliche Bewegungen)

sed kann direkt den Inhalt der Datei zu ändern, verwenden Sie nicht das Pipe-Befehl oder Datenströme umleiten! Allerdings wird, da diese Aktion sein, um direkt die ursprüngliche Datei zu ändern, so dass Sie nicht nur die Systemkonfiguration, um zu testen! Wir verwenden immer noch die heruntergeladene Datei, um sie zu testen regular_express.txt sehen!

Verwenden Sie sed an jedem Ende der Zeile, wenn es innerhalb regular_express.txt ist. Ist ersetzt!

[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt

Verwenden Sie direkt in die letzte Zeile in regular_express.txt sed "Dies ist ein Test #."

[root@www ~]# sed -i '$a # This is a test' regular_express.txt

Da die $ die letzte Zeile darstellt, und eine neue Aktion ist, so dass die endgültige Dokument hinzufügen "# Dies ist ein Test!"

sed die Option "-i", um direkt den Inhalt der Datei zu ändern, das ist sehr hilfreich! Zum Beispiel, wenn Sie eine Million Zeilen von Dateien haben wollen Sie einige Textzeile 100, diesmal mit vim kostenlos in verrückt sein! Da die Datei ist zu groß! Wie das zu tun? Sed über die Verwendung ah! Durch direkt ändern sed / Ersetzen-Funktion, verwenden Sie nicht einmal vim zu ändern!

Linux-Befehl Daquan Linux - Befehl Daquan