Heim  >  Artikel  >  System-Tutorial  >  Vertiefendes Verständnis des grep-Befehls: Anwendung regulärer Ausdrücke in grep

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

PHPz
PHPznach vorne
2024-01-13 13:30:21789Durchsuche
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
[^ ]
Beispiel für einen regulären Grep-Ausdruck

Suchen Sie nach „vivek“ im Verzeichnis /etc/passswd

grep vivek /etc/passwd

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

Suchen Sie auf jeden Fall nach vivek (d. h. Suche ohne Berücksichtigung der Groß- und Kleinschreibung)

grep -i -w vivek /etc/passwd

Suchen Sie auf jeden Fall nach Vivek oder Raj

grep -E -i -w 'vivek|raj' /etc/passwd

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

Ausgabebeispiel:

vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh

Sie können nur nach Zeilen suchen, die mit dem Wort „vivek“ beginnen, d

grep -w ^vivek /etc/passwd
Suchen Sie Zeilen, die mit dem Wort Wort enden:

grep 'foo$' 文件名
Entspricht nur Zeilen, die foo:

enthalten

grep '^foo$' 文件名
Das unten gezeigte Beispiel kann nach leeren Zeilen suchen:

grep '^$' 文件名
Charakterklasse Kombiniere Vivek oder Vivek:

grep '[vV]ivek' 文件名
oder

grep '[vV][iI][Vv][Ee][kK]' 文件名
Kann auch mit Zahlen übereinstimmen (d. h. mit Vivek1 oder Vivek2 usw. übereinstimmen):

grep -w '[vV]ivek[0-9]' 文件名
Kann mit zwei numerischen Zeichen übereinstimmen (z. B. foo11, foo12 usw.):

grep 'foo[0-9][0-9]' 文件名
Nicht nur auf Zahlen beschränkt, sondern auch auf mindestens einen Buchstaben:

grep '[A-Za-z]' 文件名
Alle Zeilen anzeigen, die „w“ oder „n“ Zeichen enthalten:

grep [wn] 文件名
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:]
- Alphanumerische Zeichen

[:alpha:]
- Alphabetische Zeichen

[:blank:]
- Nullzeichen: Leerzeichen und Tabulator

[:digit:]
-Nummer: '0 1 2 3 4 5 6 7 8 9'

[:lower:]
- 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:]
- Leerzeichen: Tabulator, Zeilenvorschub, vertikaler Tabulator, Seitenvorschub, Wagenrücklauf und Leerzeichen

[:upper:]
- 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:]' 文件名
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/>' 文件名
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 '^..$' 文件名
Zeige Zeilen, die mit einem Punkt und einer Zahl beginnen:

grep '^/.[0-9]' 文件名
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
Alle drei Punktzeichen müssen maskiert werden:

grep '192/.168/.1/.254' /etc/hosts
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}' 文件名
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--' 文件名
Wie verwende ich die „oder“-Übereinstimmung von grep? Verwenden Sie die folgende Syntax:

grep -E 'word1|word2' 文件名
或
egrep 'word1|word2' 文件名
oder

grep 'word1/|word2' 文件名
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'
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}
Um das Zeichen „v“ zu finden, das zweimal vorkommt:

egrep "v{2}" 文件名
Der folgende Befehl kann mit „col“ und „cool“ übereinstimmen:

egrep 'co{1,2}l' 文件名
Mit dem folgenden Befehl werden alle Zeilen mit mindestens drei „c“-Zeichen abgeglichen.

egrep 'c{3,}' 文件名
Das folgende Beispiel entspricht Mobiltelefonnummern im Format 91-1234567890 (d. h. zwei Ziffern – zehn Ziffern).

grep "[[:digit:]]/{2/}[ -]/?[[:digit:]]/{10/}" 文件名
Wie hebe ich den grep-Befehl hervor? Verwenden Sie die folgende Syntax:

grep --color 正则表达式 文件名
怎么样仅仅只显示匹配出的字符,而不是匹配出的行?

使用如下语法:

grep -o 正则表达式 文件名
正则表达式限定符
限定符 描述
. 匹配任意的一个字符。
? 匹配前面的子表达式,最多一次。
* 匹配前面的子表达式零次或多次。
+ 匹配前面的子表达式一次或多次。
{N} 匹配前面的子表达式 N 次。
{N,} 匹配前面的子表达式 N 次到多次。
{N,M} 匹配前面的子表达式 N 到 M 次,至少 N 次至多 M 次。
- 只要不是在序列开始、结尾或者序列的结束点上,表示序列范围。
^ 匹配一行开始的空字符串;也表示字符不在要匹配的列表中。
$ 匹配一行末尾的空字符串。
\b 匹配一个单词前后的空字符串。
\B 匹配一个单词中间的空字符串。
\< 匹配单词前面的空字符串。
\> 匹配单词后面的空字符串。
grep 和 egrep

egrep 等同于

grep -E

它会以扩展的正则表达式的模式来解释模式。下面来自 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:linuxprobe.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen