Suche nach Zeichenfolgenmustern

Suche nach Zeichenfolgenmustern

Ich bin neu bei Linux. Ich möchte als Systemadministrator arbeiten. Ich war bei einem Vorstellungsgespräch bei Amazon. Sie baten mich, einen Befehl zu schreiben, um in einer Datei die Zeichenfolge zu finden, die mit „s“ beginnt und mit „a“ endet. Ich weiß nur, dass wir grep verwenden müssen, aber ich kenne mich nicht mit den tatsächlichen Vorgängen aus. Außerdem fragten sie, wie grep funktioniert. Kann mir jemand eine kurze Antwort darauf geben?

Dank im Voraus

Antwort1

grep durchsucht die benannten Eingabedateien (oder die Standardeingabe, wenn keine Dateien benannt sind oder wenn ein einzelnes Bindestrich-Minus (-) als Dateiname angegeben ist) nach Zeilen, die eine Übereinstimmung mit dem angegebenen MUSTER enthalten. Standardmäßig druckt grep die übereinstimmenden Zeilen aus.

Grep-Befehle

Grep und seine Optionen

-v  =   non-matching lines
-c  =   count of matching  lines
-i  =   Ignore  case
-r  =   Read all  files  under  each  directory
-l  =   list the file which contain the searching keyword
 ^      =       Search the Starting word of a file
.$      =       Search the end word of a file
^$      =       Search the empty lines in a file

Suchen Sie nach allen Zeilen, die in einer Datei einem bestimmten Schlüsselwort entsprechen.

grep sysadmin /etc/passwd

Anzeige mit Zahlen

grep -nv nologin /etc/passwd

Um das Schlüsselwort zu vermeiden und nach anderen zu suchen

grep -v sysadmin /etc/passwd

Um zu zählen, wie viele Zeilen mit den gesuchten Schlüsselwörtern übereinstimmen

grep -c sysadmin /etc/passwd

So suchen Sie Text unter Berücksichtigung der Groß-/Kleinschreibung

grep -i sysadmin /etc/passwd

Durchsucht alle Dateien /homeund Unterverzeichnisse nach Text, der einem bestimmten Muster entspricht, und druckt die übereinstimmenden Zeilen aus.

grep -ri sysadmin /home/

Durchsucht alle Dateien /homeund Unterverzeichnisse nach Text, der einem bestimmten Muster entspricht, und listet die Dateien auf, die ihn enthalten.

grep -ril sysadmin /home/

Um nach einer bestimmten IP unter vielen IPs zu suchen. Dadurch -Fwird sichergestellt, dass die .Übereinstimmung wörtlich ist .. Ohne diese Option würde jede Übereinstimmung mit einem beliebigen Zeichen erfolgen.

grep -F "192.168.1.10" /var/log/syslog

Um nach einer Zeile zu suchen, die mit beginntFeb

grep ^Feb /var/log/syslog

Um nach einer Zeile zu suchen, die mit endetqueue

grep queue$ /var/log/mail.log

So zählen Sie die leeren Zeilen in einer Datei (Zeilen mit Leerzeichen werden nicht gezählt)

grep -c ^$ /var/log/mail.log

Suche nach einer Zeichenfolge in allen Dateien eines Verzeichnisses und seiner Unterverzeichnisse

grep -r "root" .

Antwort2

Versuchen Sie diesen GNU grep-Befehl mit -Pder Option (Perl-regex),

 grep -oP '\bs.*a\b' file

Erläuterung:

\b    # Matches the word boundary(ie, match between a word character and a non word character)
s     # Starting character would be a literal s.
.*    # Matches any character zero or more times.
a     # Matches a literal a.
\b    # Matches the word boundary(ie, match between a word character and a non word character)

verwandte Informationen