2015-01-01 31 views
5

Ich bin überrascht, dass ich keine ähnliche Frage zu SO auf SO finden kann.sed-delete-Zeile, die kein Muster enthält

Wie verwende ich sed, um alle Zeilen zu löschen, die kein bestimmtes Muster enthalten.

Zum Beispiel habe ich diese Datei:

cat kitty dog 
giraffe panda 
lion tiger 

Ich möchte ein sed-Befehl, der, wenn sie aufgerufen wird, werden alle Zeilen löschen, die das Wort nicht cat:

cat kitty dog 

Antwort

8

Dieser Wille tun:

sed -i '/cat/!d' file1.txt 

eine genaue Übereinstimmung zu erzwingen:

sed -i '/\<cat\>/!d' file1.txt 

oder

sed -i '/\bcat\b/!d' file1.txt 

wo \<\> & \b\b Kraft eine genaue Übereinstimmung.

+1

Auch, sed -n '/ cat/p'' –

+0

Probieren Sie das am Eingang, der das Wort 'scatter' enthält. Ist das das gewünschte Verhalten? –

+1

@EdMorton: Vielen Dank für das Feedback. – Amit

4

Also Ihre Anforderung wäre "geben Sie mir alle Zeilen mit String cat". warum dann nicht einfach grep mit:

grep cat file 
1

Sie dieses awk

können
awk '/cat/' file 
1

alle Zeilen containg Wort 'Katze' zu sehen (wie von Kent zeigte):

grep cat file 

um alle Zeilen zu sehen, die KEIN Wort enthalten:

grep -v cat file 
Verwandte Themen