Verwenden Sie grep für eine lange Zeile, um den Teil der Zeile zu erhalten

453
whitebear

Ich möchte in einem langen Satz suchen (mehr als 1024 Buchstaben).

Ich habe eine Textdatei ( test.txt), die einen langen Satz wie folgt enthält:

afdafglwqgkjrldjl;ewqje;'k;g;je;;;fdsgalsdkf;akslg;safdas.....dasfsd 

Jetzt möchte ich prüfen, in welcher Zeile das Wort steht saf. Dieser Befehl zeigt nur den ganzen Satz:

less test.txt | grep saf 

Kann ich einen Teil des Satzes erhalten oder sollte ich einen anderen Befehl als verwenden grep?

1
`grep -o 'saf' text.text`? Cyrus vor 5 Jahren 0
Vielen Dank! Es zeigt den übereinstimmenden Punkt. Ist es jedoch möglich, die Buchstaben vor und nach den Spielen anzuzeigen? whitebear vor 5 Jahren 0
`grep -o '. \ saf. \ ' text.text` - dies umfasst bis zu drei Zeichen vor und bis zu drei Zeichen nach. Wenn es jedoch einen zweiten "saf" gibt, der innerhalb dieser "drei Zeichen nach" beginnt, wird er nicht separat abgeglichen. Kamil Maciorowski vor 5 Jahren 0
@ KamilMaciorowski Es ist perfekt was ich will. es funktioniert gut whitebear vor 5 Jahren 0

1 Antwort auf die Frage

2
t0r0X

Nicht genau das, wonach Sie gesucht haben: Zeigen Sie die passenden Zeilen und markieren Sie die Vorkommnisse in diesen Zeilen:

grep --color 'saf' test.txt 

Optionen zum Suchen safund Anzeigen von bis zu 15 Zeichen vor und nach den gefundenen Vorkommnissen mit:

  • die Standard-Regex-Syntax, die @ kamil-maciorowski in seinem Kommentar zu der Frage zum ersten Mal erwähnt hat:

    grep -o '.\saf.\' test.txt | grep saf --color 
  • Perl-kompatible Regex-Syntax mit der -POption, falls verfügbar:

    grep -o -P '.saf.' test.txt | grep --color saf 
  • Erweiterte Regex-Syntax mit der -EOption, wenn Sie grepkeine -POption haben (wie zB unter macOS):

    grep -o -E '.saf.' test.txt | grep --color saf 
Siehe meinen Kommentar unter der Frage. Wenn Sie Ihrer Antwort eine Bemerkung hinzufügen, dass möglicherweise nicht alle `saf`-s übereinstimmen, werde ich sie stimmen und meinen Kommentar löschen. Kamil Maciorowski vor 5 Jahren 0
Danke @ t0r0X, ich habe auch einen ausprobiert. mein grep hat -P Option irgendwie nicht. und Backslash vor {wird benötigt. Aber ich schätze auch deine Antwort. whitebear vor 5 Jahren 0
@whitebear In der Tat hat nicht jeder grep '-P', aber es gibt noch eine andere Variante, ich werde meine Antwort noch einmal aktualisieren. t0r0X vor 5 Jahren 0
@ Kamil-Maciorowski Ich werde es untersuchen. t0r0X vor 5 Jahren 0