###導入###
| Linux および Unix 系システムで Grep コマンドの正規表現を使用するにはどうすればよいですか? Linux には、拡張正規表現をサポートする GNU grep コマンド ツールが付属しており、GNU grep はすべての Linux システムにデフォルトで含まれています。 Grep コマンドは、サーバーまたはワークステーションに保存されている情報を検索して見つけるために使用されます。
|
###正規表現###
正規表現は、入力の各行を照合するために使用されるパターンであり、文字のシーケンスを指します。以下は例です:
リーリー
grep 正規表現の例
/etc/passswd ディレクトリで「vivek」 を検索します
リーリー
出力例:
リーリー
どんな場合でも vivek を検索します (つまり、大文字と小文字を区別しない検索)
リーリー
いずれの場合も vivek または raj を検索してください
リーリー
上記の最後の例は、拡張正規表現パターンを示しています。
###アンカー###
^ 記号と $ 記号をそれぞれ使用すると、入力行の先頭または末尾を定期的に一致させることができます。次の検索例では、vivek で始まる入力行のみが表示されます:
リーリー
出力例:
リーリー
単語 vivek で始まる行のみを検索できます。つまり、vivekgit、vivekg などは表示されません (LCTT 翻訳注釈: 単語の後にスペースや記号などの英単語区切り文字が続きます)
リーリー
単語 word で終わる行を検索します:
リーリー
foo を含む行のみに一致します:
リーリー
以下に示す例では、空行を検索できます:
リーリー
文字クラス
Vivek または vivek と一致:
リーリー
###または###
リーリー
数値と一致することもできます (つまり、vivek1 または Vivek2 などと一致します):
リーリー
2 つの数字と一致します (foo11、foo12 など):
リーリー
は数字に限定されず、少なくとも 1 つの文字と一致する場合があります:
リーリー
「w」または「n」文字を含むすべての行を表示します:
リーリー
括弧で囲まれた式、つまり「[:」と「:]」で囲まれた文字クラスの名前は、このクラスに属するすべての文字のリストを表します。標準の文字クラス名は次のとおりです:
リーリー
###- 英数字###
リーリー
- アルファベット
リーリー
- ヌル文字: スペースおよびタブ文字
リーリー
-番号: '0 1 2 3 4 5 6 7 8 9'
リーリー
- 小文字: 'a b c d e f g h i j k l m no p q r s t u v w x y z'
リーリー
- スペース文字: タブ、ラインフィード、垂直タブ、フォームフィード、キャリッジリターン、およびスペース文字
リーリー
- 大文字: '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'
この例では、すべての大文字が一致します:
リーリー
ワイルドカード
「.」を使用して単一の文字と一致させることができます。この例は、「b」で始まり「t」で終わる 3 文字の単語と一致します:
リーリー
###ここ、###
単語の前の空の文字列と一致します
単語 の後の空の文字列と一致します
2 文字だけを含むすべての行を出力します:
リーリー
ドットと数字で始まる行を表示します:
リーリー
ドット文字エスケープ
IP アドレス 192.168.1.254 に一致する次の正規表現は正しくありません: (LCTT アノテーション: IP アドレスに一致する可能性がありますが、区切り記号がドットでない同様の形式に一致することも可能です)
リーリー
3 つのドット文字はすべてエスケープする必要があります:
リーリー
次の例は、IP アドレスにのみ一致します: (LCTT 変換: 実際、IP アドレスの数値の範囲により、この正規表現は正確ではありません)
リーリー
「-」記号で始まる一致するパターンを検索するにはどうすればよいですか?
-e オプションを使用して、'--test--' に一致する文字列を検索します。-e オプションを使用しない場合、grep コマンドは、'--test--' を独自のオプション パラメータとして解析しようとします。 :
リーリー
grep の「or」マッチングを使用する方法は?
次の構文を使用します:
リーリー
あるいはそれは可能性があります
リーリー
grep の「and」マッチングを使用する方法は?
「word1」と「word2」の両方を含むすべての行を表示するには、次の構文を使用します。
リーリー
シーケンス検出の使用方法?
次の構文を使用すると、シーケンス内で文字が繰り返し出現する回数を検出できます。
リーリー
2 回出現する文字「v」を照合するには:
リーリー
次のコマンドは「col」と「cool」に一致します:
リーリー
次のコマンドは、少なくとも 3 つの「c」文字を含むすべての行と一致します。
リーリー
次の例は、91-1234567890 (つまり、2 桁から 10 桁) の形式の携帯電話番号と一致します。
リーリー
grep コマンドを強調表示するにはどうすればよいですか?
次の構文を使用します:
grep --color 正则表达式 文件名
ログイン後にコピー
怎么样仅仅只显示匹配出的字符,而不是匹配出的行?
使用如下语法:
grep -o 正则表达式 文件名
ログイン後にコピー
正则表达式限定符
限定符 |
描述 |
. |
匹配任意的一个字符。 |
? |
匹配前面的子表达式,最多一次。 |
* |
匹配前面的子表达式零次或多次。 |
+ |
匹配前面的子表达式一次或多次。 |
{N} |
匹配前面的子表达式 N 次。 |
{N,} |
匹配前面的子表达式 N 次到多次。 |
{N,M} |
匹配前面的子表达式 N 到 M 次,至少 N 次至多 M 次。 |
- |
只要不是在序列开始、结尾或者序列的结束点上,表示序列范围。 |
^ |
匹配一行开始的空字符串;也表示字符不在要匹配的列表中。 |
$ |
匹配一行末尾的空字符串。 |
\b |
匹配一个单词前后的空字符串。 |
\B |
匹配一个单词中间的空字符串。 |
\< |
匹配单词前面的空字符串。 |
\> |
匹配单词后面的空字符串。 |
grep 和 egrep
egrep 等同于
它会以扩展的正则表达式的模式来解释模式。下面来自 grep 的帮助页:
基本的正则表达式元字符 ?、+、 {、 |、 ( 和 ) 已经失去了它们原来的意义,要使用的话用反斜线的版本 /?、/+、/{、/|、/( 和 /) 来代替。 传统的 egrep 并不支持 { 元字符,一些 egrep 的实现是以 /{ 替代的,所以一个可移植的脚本应该避免在 grep -E 使用 { 符号,要匹配字面的 { 应该使用 [}]。
GNU grep -E 试图支持传统的用法,如果 { 出在在无效的间隔规范字符串这前,它就会假定 { 不是特殊字符。
例如,grep -E '{1' 命令搜索包含 {1 两个字符的串,而不会报出正则表达式语法错误。
POSIX.2 标准允许这种操作的扩展,但在可移植脚本文件里应该避免这样使用。