Linux の grep コマンドと egrep コマンドの詳細な説明

Linux の grep コマンドと egrep コマンドの詳細な説明

反復/egrep

構文: grep [-cinvABC] 'word' ファイル名

-c : 要件を満たす行の数を出力します
-i : 大文字と小文字を区別しない
-n: 要件を満たす行とともに行番号を出力します
-v : 要件を満たさない行を印刷する
-A : 数字(スペースの有無は問わない)が続きます。たとえば、A2は要件を満たす行とそれに続く2行を印刷することを意味します。
-B: 数字が続きます。たとえば、B2 は、要件を満たす行と上記の 2 行を印刷することを意味します。
-C: 後に数字が続きます (例: C2)。これは、要件を満たす行とその上下 2 行を印刷することを意味します。

'halt' を含む行とそれに続く 2 行を出力します。

[root@localhost ~]# grep -A2 'halt' /etc/passwd
停止:x:7:0:停止:/sbin:/sbin/停止
メール:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

'halt' を含む行とその上の 2 行を出力します。

[root@localhost ~]# grep -B2 'halt' /etc/passwd
同期:x:5:0:sync:/sbin:/bin/sync
シャットダウン:x:6:0:シャットダウン:/sbin:/sbin/シャットダウン
停止:x:7:0:停止:/sbin:/sbin/停止

'halt' を含む行とその上下の 2 行を出力します。

特定のキーワードを含む行をフィルタリングし、行番号を出力する

[root@localhost ~]# grep -n 'root' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
11:オペレータ:x:11:0:オペレータ:/root:/sbin/nologin

特定のキーワードを含まない行をフィルタリングし、行番号を出力する

[root@localhost ~]# grep -nv 'nologin' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:シャットダウン:x:6:0:シャットダウン:/sbin:/sbin/シャットダウン
8:halt:x:7:0:halt:/sbin:/sbin/halt
26:test:x:511:511::/home/test:/bin/bash
27:test1:x:512:511::/home/test1:/bin/bash

数字を含むすべての行を除外する

[root@localhost ~]# grep '[0-9]' /etc/inittab
# upstart は動作します。init(5)、init(8)、initctl(8) を参照してください。
# 0 - 停止 (initdefault をこれに設定しないでください)
# 1 - シングルユーザーモード
# 2 - マルチユーザー、NFSなし(ネットワークがない場合は3と同じ)
# 3 - フルマルチユーザーモード
# 4 - 未使用
# 5 - X11
# 6 - 再起動 (initdefault をこれに設定しないでください)
id:3:initdefault:

数字を含まない行をすべて除外する

[root@localhost ~]# grep -v '[0-9]' /etc/inittab
# inittab はデフォルトのランレベルでのみ upstart によって使用されます。
#
# ここで他の構成を追加してもシステムには影響しません。
#
# システムの初期化は/etc/init/rcS.confによって開始されます
#
# 個々のランレベルは /etc/init/rc.conf によって開始されます
#
# Ctrl-Alt-Delete は /etc/init/control-alt-delete.conf によって処理されます
#
# 端末のgettyは/etc/init/tty.confと/etc/init/serial.confによって処理されます。
# /etc/sysconfig/init の設定に従います。
#
# Upstartイベントハンドラの書き方や、
#
# デフォルトのランレベル。使用されるランレベルは次のとおりです。
#

'#'で始まる行をすべて削除します

[root@localhost ~]# grep -v '^#' /etc/inittab
id:3:initdefault:

空白行と「#」で始まる行をすべて削除します

[root@localhost ~]# grep -v '^#' /etc/crontab |grep -v '^$'
シェル=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=ルート
ホーム=/

正規表現では、「^」は行の始まりを示し、「$」は行の終わりを示し、空白行は「^$」で表すことができます。英語の文字で始まっていない行を印刷するにはどうすればよいでしょうか。

[root@localhost ~]# vim test.txt
[root@localhost ~]# cat test.txt
123
アブ
456
翻訳:
#ラックス
全部

まず、実験のために test.txt に数行の文字列を書き込みます。

[root@localhost ~]# grep '^[^a-zA-Z]' test.txt
123
456
#ラックス
[root@localhost ~]# grep '[^a-zA-Z]' test.txt
123
456
翻訳:
#ラックス

数字の場合は、[0-9] の形式を使用します。もちろん、1 または 5 のみを含む [15] の形式を使用することもできます。この場合、15 とはみなされないことに注意してください。数字と大文字と小文字を除外したい場合は、[0-9a-zA-Z]と記述する必要があります。また、[ ] には [ ] 内の文字以外の文字を表す [^ 文字] という別の形式もあります。

任意の文字と繰り返し文字をフィルタリングする

[root@localhost ~]# grep 'r..o' /etc/passwd
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
ゴーファー:x:13:30:ゴーファー:/var/ゴーファー:/sbin/nologin
vcsa:x:69:69:仮想コンソール メモリ所有者:/dev:/sbin/nologin

. は任意の文字を表します。上記の例では、r と o の間にある 2 つの文字を含む行が除外されます。* は、先行する文字の 0 個以上を表します。

[root@localhost ~]# grep 'ooo*' /etc/passwd
ルート:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
メール:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

「ooo*」は、oo、ooo、oooo ... または「o」の増加を意味します。では、「.*」の組み合わせが何を意味するか考えてみましょう。

[root@localhost ~]# grep '.*' /etc/passwd |wc -l
27
[root@localhost ~]# wc -l /etc/passwd
27 /etc/passwd

「.*」は、空白行を含む 0 個以上の任意の文字を意味します。

フィルタリングする文字の出現回数を指定します

[root@localhost ~]# grep 'o\{2\}' /etc/passwd
ルート:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
メール:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

エスケープ文字\なしで-Eを使用することもできます。

grep -E 'o{2}' /etc/passwd

ここでは { } が使用され、内部の数字は前の文字が繰り返される回数を示します。上記の例では、2 つの o、つまり「oo」を含む行を意味します。 { } の両側にエスケープ文字 '\' が必要であることに注意してください。また、{ } を使用して範囲を表すこともできます。具体的な形式は '{n1,n2}' です。ここで、n1<n2 は前の文字を n1 回から n2 回繰り返すことを意味します。n2 は空にすることもできます。その場合は n1 回以上であることを意味します。

上で述べた grep は、よく使われるツールである egrep でもあります。簡単に言うと、後者は前者の拡張版です。egrep を使用すると、grep では実行できないタスクを実行できます。もちろん、egrep は grep で実行できるタスクも実行できます。面倒だと感じる場合は、egrep について学習してください。grep の機能は日常業務には十分です。以下は、grep では使用されない egrep の使用法の一部です。テストの便宜上、test.txt を次の内容に編集します。

rot:x:0:0:/rot:/bin/bash
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
ルート:x:0:0:/ルート:/bin/bash
111111111111111111111111111111
ああああああああああああああ

1つ以上の先行文字をフィルタリングする

[root@localhost ~]# egrep 'o+' test.txt
rot:x:0:0:/rot:/bin/bash
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
ルート:x:0:0:/ルート:/bin/bash
[root@localhost ~]# egrep 'oo+' test.txt
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
ルート:x:0:0:/ルート:/bin/bash
[root@localhost ~]# egrep 'ooo+' test.txt
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
ルート:x:0:0:/ルート:/bin/bash

直前の文字の0回または1回の出現をフィルターします

[root@localhost ~]# egrep 'o?' test.txt
rot:x:0:0:/rot:/bin/bash
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
ルート:x:0:0:/ルート:/bin/bash
111111111111111111111111111111
ああああああああああああああ
[root@localhost ~]# egrep 'ooo?' test.txt
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
ルート:x:0:0:/ルート:/bin/bash
[root@localhost ~]# egrep 'oooo?' test.txt
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
ルート:x:0:0:/ルート:/bin/bash

フィルター文字列 1 または文字列 2

[root@localhost ~]# egrep 'aaa|111|ooo' test.txt
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
ルート:x:0:0:/ルート:/bin/bash
111111111111111111111111111111
ああああああああああああああ

egrep における ( ) の応用

[root@localhost ~]# egrep 'r(oo)|(at)o' test.txt
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
ルート:x:0:0:/ルート:/bin/bash

全体を表すには ( ) を使用します。たとえば、(oo)+ は 1 つの「oo」または複数の「oo」を意味します。

[root@localhost ~]# egrep '(oo)+' test.txt
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
ルート:x:0:0:/ルート:/bin/bash

以上が今回紹介したLinuxのgrepコマンドとegrepコマンドの関連知識の全てです。123WORDPRESS.COMをご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • Linux での grep コマンドの使い方の詳細な説明
  • Linux でタブと改行を一致させる Grep コマンド
  • Linuxはgrepを使用して複数の条件をフィルタリングし、grepの一般的なフィルタリングコマンドを使用します。
  • Linux で grep コマンドを使用してファイルの内容を取得する方法
  • Linux の一般的なコマンドと find と grep の違い
  • Linux テキスト フィルタリング grep 基本コマンドの紹介 (5)
  • Linux grepコマンドの詳細な説明
  • Linux の grep コマンドの詳細な理解
  • Linux での Grep コマンドの使用
  • Linux での grep コマンドの使い方の詳細な説明

<<:  Vue の foreach 配列と js の traversal 配列の書き方の説明

>>:  Mysql データベースの日付と日時型でデフォルト値 0000-00-00 を設定するときに発生するエラー問題の詳細な説明

推薦する

表には表示したい境界コードが表示されます

テーブルの共通プロパティ基本的な属性は、width (幅)、height (高さ)、border (...

DockerにTomcat8をインストールする方法

1. dockerでtomcat8をインストールする1. Docker HubでTomcatイメージ...

docker compose の記述ルールについての簡単な説明

この記事ではクラスタの展開に関連する内容は紹介しませんバージョン制約Docker エンジン >...

jQueryはスライディングタブを実装する

この記事では、スライドタブを実装するためのjQueryの具体的なコードを参考までに紹介します。具体的...

WindowsにOpenSSLをインストールし、OpenSSLを使用して公開鍵と秘密鍵を生成します。

1. OpenSSL公式サイト公式ダウンロードアドレス: https://www.openssl....

MySQLデータベーステーブルの定期バックアップの実装の詳細な説明

Mysqlデータベーステーブルの定期的なバックアップの実装0. 背景実際の開発環境では、フロントエン...

Alipay の新しいホームページのフロントエンドの実践的な概要

もちろん、ページ パフォーマンスの最適化に関する個人的な経験も含まれています。ここでいくつかの点につ...

Linux7 ベースの Hadoop のインストールと構成の詳細なグラフィック説明

上記のように材料を準備します(ps: hadoop-3.1.2-srcはhadoop-3.1.2に変...

Vuex ステートマシンの簡単な理解とサンプルアプリケーション

目次1. 概念の素早い理解: 1. コンポーネント間でデータを共有する方法: 2. vuex とは何...

HTML はテキストの外側に省略記号を表示します...テキストオーバーフローによって実装されます

div または span に同時に CSS を適用する必要があります。コードをコピーコードは次のとお...

MySQLがlocalhost経由でデータベースに接続できない問題に対する完璧な解決策

問題:あるサーバー上の PHP プログラムは、localhost アドレス経由でデータベースに接続で...

Docker Secretの管理と使用の詳細な説明

1. Docker Secretとは1. シナリオ表示MySQL サービスなど、一部のサービスではパ...

Docker コンテナの正常なシャットダウン前にトラップを使用して環境のクリーンアップを実行する

実行中のコンテナが終了したときに、コンテナが完全に終了する前に環境をクリーンアップするなど、いくつか...

DockerにRabbitMQを素早くインストールする方法

1. 画像を取得する #Webコントロールページを含むバージョンを指定します docker pull...

ソースコードの観点からキープアライブコンポーネントのキャッシュ原理に答える

今日は、早速本題に入り、面接中に尋ねられた質問、つまりキープアライブ コンポーネントのキャッシュ原理...