Heim > System-Tutorial > LINUX > Hauptteil

Vertiefendes Verständnis des grep-Befehls: Anwendung regulärer Ausdrücke in grep

PHPz
Freigeben: 2024-01-13 13:30:21
nach vorne
805 Leute haben es durchsucht
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!

Quelle:linuxprobe.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage