Einführung |
Wie verwende ich die regulären Ausdrücke des Grep-Befehls in Linux- und Unix-ähnlichen Systemen? Linux wird mit dem Befehlstool GNU grep geliefert, das erweiterte reguläre Ausdrücke unterstützt, und GNU grep ist standardmäßig in allen Linux-Systemen enthalten. Mit dem Grep-Befehl können Sie alle auf Ihrem Server oder Ihrer Workstation gespeicherten Informationen durchsuchen und lokalisieren. |
Reguläre Ausdrücke
Regulärer Ausdruck ist ein Muster, das verwendet wird, um jede Eingabezeile abzugleichen. Das Muster bezieht sich auf eine Zeichenfolge. Hier ein Beispiel:
^w1
w1|w2
[^ ]
Nach dem Login kopieren
Beispiel für einen regulären Grep-Ausdruck
Suchen Sie nach „vivek“ im Verzeichnis /etc/passswd
grep vivek /etc/passwd
Nach dem Login kopieren
Ausgabebeispiel:
vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
gitevivek:x:1002:1002::/home/gitevivek:/bin/sh
Nach dem Login kopieren
Suchen Sie auf jeden Fall nach vivek (d. h. Suche ohne Berücksichtigung der Groß- und Kleinschreibung)
grep -i -w vivek /etc/passwd
Nach dem Login kopieren
Suchen Sie auf jeden Fall nach Vivek oder Raj
grep -E -i -w 'vivek|raj' /etc/passwd
Nach dem Login kopieren
Das letzte Beispiel oben zeigt ein erweitertes reguläres Ausdrucksmuster.
Anker
Sie können die Symbole ^ und $ verwenden, um den Anfang oder das Ende der Eingabezeile regelmäßig abzugleichen. Die folgende Beispielsuche zeigt nur Eingabezeilen an, die mit vivek beginnen:
grep ^vivek /etc/passwd
Nach dem Login kopieren
Ausgabebeispiel:
vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
Nach dem Login kopieren
Sie können nur nach Zeilen suchen, die mit dem Wort „vivek“ beginnen, d
grep -w ^vivek /etc/passwd
Nach dem Login kopieren
Suchen Sie Zeilen, die mit dem Wort Wort enden:
grep 'foo$' 文件名
Nach dem Login kopieren
Entspricht nur Zeilen, die foo:
enthalten
grep '^foo$' 文件名
Nach dem Login kopieren
Das unten gezeigte Beispiel kann nach leeren Zeilen suchen:
grep '^$' 文件名
Nach dem Login kopieren
Charakterklasse
Kombiniere Vivek oder Vivek:
grep '[vV]ivek' 文件名
Nach dem Login kopieren
oder
grep '[vV][iI][Vv][Ee][kK]' 文件名
Nach dem Login kopieren
Kann auch mit Zahlen übereinstimmen (d. h. mit Vivek1 oder Vivek2 usw. übereinstimmen):
grep -w '[vV]ivek[0-9]' 文件名
Nach dem Login kopieren
Kann mit zwei numerischen Zeichen übereinstimmen (z. B. foo11, foo12 usw.):
grep 'foo[0-9][0-9]' 文件名
Nach dem Login kopieren
Nicht nur auf Zahlen beschränkt, sondern auch auf mindestens einen Buchstaben:
grep '[A-Za-z]' 文件名
Nach dem Login kopieren
Alle Zeilen anzeigen, die „w“ oder „n“ Zeichen enthalten:
grep [wn] 文件名
Nach dem Login kopieren
Der in Klammern gesetzte Ausdruck, also der zwischen „[:“ und „:]“ eingeschlossene Name der Zeichenklasse, stellt eine Liste aller zu dieser Klasse gehörenden Zeichen dar. Die Standardnamen der Zeichenklassen lauten wie folgt:
[:alnum:]
Nach dem Login kopieren
- Alphanumerische Zeichen
[:alpha:]
Nach dem Login kopieren
- Alphabetische Zeichen
[:blank:]
Nach dem Login kopieren
- Nullzeichen: Leerzeichen und Tabulator
[:digit:]
Nach dem Login kopieren
-Nummer: '0 1 2 3 4 5 6 7 8 9'
[:lower:]
Nach dem Login kopieren
- Kleinbuchstaben: 'a b c d e f g h i j k l m n o p q r s t u v w x y z'
[:space:]
Nach dem Login kopieren
- Leerzeichen: Tabulator, Zeilenvorschub, vertikaler Tabulator, Seitenvorschub, Wagenrücklauf und Leerzeichen
[:upper:]
Nach dem Login kopieren
- Großbuchstaben: „A B C D E F G H I J K L M N O P Q R S T U V W X Y Z“
In diesem gezeigten Beispiel werden alle Großbuchstaben abgeglichen:
grep '[:upper:]' 文件名
Nach dem Login kopieren
Platzhalter
Sie können „.“ verwenden, um ein einzelnes Zeichen zuzuordnen. Das Beispiel entspricht dreistelligen Wörtern, die mit „b“ beginnen und mit „t“ enden:
grep '/<b.t/>' 文件名
Nach dem Login kopieren
hier,
Passen Sie die leere Zeichenfolge vor dem Wort an
Entspricht der leeren Zeichenfolge nach dem Wort
Alle Zeilen mit nur zwei Zeichen ausdrucken:
grep '^..$' 文件名
Nach dem Login kopieren
Zeige Zeilen, die mit einem Punkt und einer Zahl beginnen:
grep '^/.[0-9]' 文件名
Nach dem Login kopieren
Punktzeichen-Flucht
Der folgende reguläre Ausdruck zur Übereinstimmung mit der IP-Adresse 192.168.1.254 ist falsch: (LCTT-Übersetzung: Er kann mit der IP-Adresse übereinstimmen, aber es ist auch möglich, ähnliche Formate abzugleichen, bei denen das Leerzeichen kein Punkt ist)
grep '192.168.1.254' /etc/hosts
Nach dem Login kopieren
Alle drei Punktzeichen müssen maskiert werden:
grep '192/.168/.1/.254' /etc/hosts
Nach dem Login kopieren
Das folgende Beispiel kann nur IP-Adressen abgleichen: (LCTT-Übersetzung: Aufgrund des Zahlenbereichs in der IP-Adresse ist dieser reguläre Ausdruck tatsächlich nicht korrekt)
egrep '[[:digit:]]{1,3}/.[[:digit:]]{1,3}/.[[:digit:]]{1,3}/.[[:digit:]]{1,3}' 文件名
Nach dem Login kopieren
Wie suche ich nach passenden Mustern, die mit dem Symbol „-“ beginnen?
Verwenden Sie die Option -e, um nach der Zeichenfolge zu suchen, die mit „--test--“ übereinstimmt. Wenn Sie die Option -e nicht verwenden, versucht der Befehl grep, „--test--“ als eigenen Optionsparameter zu analysieren:
grep -e '--test--' 文件名
Nach dem Login kopieren
Wie verwende ich die „oder“-Übereinstimmung von grep?
Verwenden Sie die folgende Syntax:
grep -E 'word1|word2' 文件名
或
egrep 'word1|word2' 文件名
Nach dem Login kopieren
oder
grep 'word1/|word2' 文件名
Nach dem Login kopieren
Wie verwende ich die „und“-Übereinstimmung von grep?
Verwenden Sie die folgende Syntax, um alle Zeilen anzuzeigen, die sowohl „Wort1“ als auch „Wort2“ enthalten
grep 'word1' 文件名 | grep 'word2'
Nach dem Login kopieren
Wie verwende ich die Sequenzerkennung?
Mit der folgenden Syntax können Sie ermitteln, wie oft ein Zeichen in einer Sequenz wiederholt vorkommt:
{N}
{N,}
{min,max}
Nach dem Login kopieren
Um das Zeichen „v“ zu finden, das zweimal vorkommt:
egrep "v{2}" 文件名
Nach dem Login kopieren
Der folgende Befehl kann mit „col“ und „cool“ übereinstimmen:
egrep 'co{1,2}l' 文件名
Nach dem Login kopieren
Mit dem folgenden Befehl werden alle Zeilen mit mindestens drei „c“-Zeichen abgeglichen.
egrep 'c{3,}' 文件名
Nach dem Login kopieren
Das folgende Beispiel entspricht Mobiltelefonnummern im Format 91-1234567890 (d. h. zwei Ziffern – zehn Ziffern).
grep "[[:digit:]]/{2/}[ -]/?[[:digit:]]/{10/}" 文件名
Nach dem Login kopieren
Wie hebe ich den grep-Befehl hervor?
Verwenden Sie die folgende Syntax:
grep --color 正则表达式 文件名
Nach dem Login kopieren
怎么样仅仅只显示匹配出的字符,而不是匹配出的行?
使用如下语法:
grep -o 正则表达式 文件名
Nach dem Login kopieren
正则表达式限定符
限定符 |
描述 |
. |
匹配任意的一个字符。 |
? |
匹配前面的子表达式,最多一次。 |
* |
匹配前面的子表达式零次或多次。 |
+ |
匹配前面的子表达式一次或多次。 |
{N} |
匹配前面的子表达式 N 次。 |
{N,} |
匹配前面的子表达式 N 次到多次。 |
{N,M} |
匹配前面的子表达式 N 到 M 次,至少 N 次至多 M 次。 |
- |
只要不是在序列开始、结尾或者序列的结束点上,表示序列范围。 |
^ |
匹配一行开始的空字符串;也表示字符不在要匹配的列表中。 |
$ |
匹配一行末尾的空字符串。 |
\b |
匹配一个单词前后的空字符串。 |
\B |
匹配一个单词中间的空字符串。 |
\< |
匹配单词前面的空字符串。 |
\> |
匹配单词后面的空字符串。 |
grep 和 egrep
egrep 等同于
grep -E
Nach dem Login kopieren
它会以扩展的正则表达式的模式来解释模式。下面来自 grep 的帮助页:
基本的正则表达式元字符 ?、+、 {、 |、 ( 和 ) 已经失去了它们原来的意义,要使用的话用反斜线的版本 /?、/+、/{、/|、/( 和 /) 来代替。 传统的 egrep 并不支持 { 元字符,一些 egrep 的实现是以 /{ 替代的,所以一个可移植的脚本应该避免在 grep -E 使用 { 符号,要匹配字面的 { 应该使用 [}]。
GNU grep -E 试图支持传统的用法,如果 { 出在在无效的间隔规范字符串这前,它就会假定 { 不是特殊字符。
例如,grep -E '{1' 命令搜索包含 {1 两个字符的串,而不会报出正则表达式语法错误。
POSIX.2 标准允许这种操作的扩展,但在可移植脚本文件里应该避免这样使用。
Das obige ist der detaillierte Inhalt vonVertiefendes Verständnis des grep-Befehls: Anwendung regulärer Ausdrücke in grep. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!