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 /home
und Unterverzeichnisse nach Text, der einem bestimmten Muster entspricht, und druckt die übereinstimmenden Zeilen aus.
grep -ri sysadmin /home/
Durchsucht alle Dateien /home
und 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 -F
wird 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 -P
der 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)