it-swarm.com.de

sed: Unterschied zwischen "sed 's /\- .*//" & "sed' /\-/s/\- .*//gw"

Ich lerne einige einfache sed Befehle.

Befehl # 1

sed 's/\-.*//gw without' tgs.txt

Befehl Nr. 2

sed '/\-/s/\-.*//gw with' tgs.txt

Ausgang Nr. 1

$ cat with
2. Databases 
6. Windows
 Raja

Ausgang Nr. 2

$ cat without 
2. Databases 
6. Windows
 Raja

Unterschied zwischen ihnen

$ diff with without 
$

Was ist der Unterschied zwischen diesen beiden Befehlen?

1
rɑːdʒɑ

Es gibt keinen Unterschied zwischen diesen in Kraft:

sed 's/\-.*//g'
sed '/\-/s/\-.*//g'

Das erste Formular wirkt sich auf alle Zeilen aus, das zweite Formular nur auf die Zeilen, die mit /-/nter Verwendung von Adressen übereinstimmen . Da die durchgeführte Aktion - enthält, wirken sich beide Zeilen nur auf die Zeilen aus, die - enthalten.

Wenn Sie stattdessen /Raja/ als Adresse verwendet hätten, hätten Sie nur die letzte Zeile in with gesehen - das sind nur die Zeilen, die Raja enthielten und die Ersetzung hatten durchgeführt.

3
muru

Diese beiden sed Befehle,

sed 's/\-.*//g'
sed '/\-/s/\-.*//g'

werde den gleichen Job machen. Lassen Sie mich erklären, wie ..

sed 's/\-.*//g'

ersetzt alle Zeichen von - bis zum letzten Zeichen durch eine leere Zeichenfolge. Wenn eine Zeile kein - -Zeichen enthält, wird sie nicht ersetzt. Das heißt, es wirkt sich nicht auf die Zeilen aus, die nicht mit dem Bindestrich - gekennzeichnet sind.

sed '/\-/s/\-.*//g'

sucht zuerst nach den Zeilen mit dem Symbol -. Wenn es eines findet, wird es in diesen Zeilen ersetzen (alle Zeichen von - bis zum letzten Zeichen durch eine leere Zeichenkette ersetzen).

Also sind beide die gleichen. Ihr erster sed Befehl würde ausreichen. Sie müssen die Suchbedingung nicht setzen. Da es sich bei - nicht um ein Sonderzeichen handelt, müssen Sie es nicht maskieren.

3
Avinash Raj