【Linux】Linux-grepコマンドを一歩一歩学ぶ(49)
00.目次
文書ディレクトリ 00. ディレクトリ 01. コマンド概要 02. コマンドフォーマット 03. 共通オプション 04. 参考例 05. 付録 01.コマンドの概要
Linuxシステムのgrepコマンドは、正規表現を使用してテキストを検索し、一致する行を印刷する強力なテキスト検索ツールです.grepのフルネームはGlobal Regular Expression Printで、グローバル正規表現バージョンを表し、その使用権限はすべてのユーザーです.
grepコマンドのオプションは、検索プロセスの補完に使用されますが、そのコマンドのモードは非常に柔軟で、変数、文字列、正規表現です.注意しなければならないのは、モードにスペースが含まれている場合は、必ず二重引用符で引き起こしてください.
linuxシステムは3つの形式のgrepコマンドをサポートし、長男はgrep、標準、模倣の代表である.二番目の息子は多くの-egrepを爱して、略称はgrepコマンドを拡張して、実はgrep-Eと等価で、基本と拡張の正則表現を支持します.末っ子が走る最速-fgrepは、高速grepコマンドと略称され、grep-Fと等価であり、正規表現はサポートされず、文字列の表面の意味に従ってマッチングされる.
02.コマンドフォーマット
03.一般的なオプション
04.参考例
4.1ファイル内の単語の検索
4.2複数のファイルで単語を検索
4.3一致以外のすべての行を出力する
4.4マッチング部分の色表示
4.5正規表現の使用
または
4.6ファイルに一致する部分のみを出力する
4.7統計ファイルまたはテキストに一致する文字列を含む行数
4.8一致する文字列を含む行番号を出力する
複数ファイルの照合
4.9出力文字またはバイトオフセット
4.10複数のファイルを検索し、一致するテキストファイルを検索する
4.11マルチレベルディレクトリでテキストを再帰的に検索する
4.12大文字と小文字の検索を無視する
4.13一致する複数の文字列を同時に指定する
4.14 grep検索結果に指定ファイルを含めるか除外する
ディレクトリ内のすべてphpと.htmlファイル内の再帰検索文字「main」
検索結果からすべてのREADMEファイルを除外
検索結果からfilelistファイルリストから除外されるファイル
4.15何も表示しない
4.16 0値バイト接尾辞を使用するgrepとxargs
4.17一致テキストの前または後の行を印刷する
結果に一致する3行を表示し、-Aオプションを使用します.
結果に一致する前の3行を表示し、-Bオプションを使用します.
結果に一致する最初の3行と後の3行を表示します.-Cオプションを使用します.
一致結果は複数あり、各一致結果間の区切り記号として「-」が使用されます.
4.18ファイル内の空白行と非空白行を検索する
統計ファイル内の空白行の行数
統計ファイルの空でないローの数
4.19 rootで始まるすべての行を出力する
4.20 bashで終わるすべてのローを出力
4.21ファイルからキーワード検索を読み込む
説明:出力/etc/passwdファイルにfileファイルから読み出したキーワードを含む内容行
4.22正規表現をサポート
現在のディレクトリの下に表示する.txt末尾のファイル内の各文字列に少なくとも7つの連続小文字を含むすべての文字列の行
4.23 rootとdengに一致するすべての行を表示する
4.24一致IPアドレス
X{m,n}マッチング文字X m-n回
4.25 rootまたはdengまたはitcastに一致する
4.26 X{m,}マッチング文字X最低m回
4.27 X{m}マッチング文字X m回
4.28+前の文字または文字列に1回または複数回一致
4.29 ? 前の文字または文字列を0回または複数回一致させる
4.30メタ文字の特殊な意味を隠すために使用
4.31[]内の文字に一致する
文字'1'を含む文字列に一致する
「a」のように文字「a」を含む文字列に一致する
文字'1'または'2'または'3'を含む文字列に一致する
文字シーケンスを使用して、「-」で文字シーケンスを表すこともできます.
文字'1'または'2'または'3'を含む文字列に一致する
文字'1'または'2'または'3'または'a'または'b'を含む文字列に一致する
4.32 .任意の単一文字に一致
任意の2文字で始まり、3番目の文字は「3」です.
05.付録
参考:【Linux】一歩一歩Linuxシリーズチュートリアルのまとめ
文書ディレクトリ
Linuxシステムのgrepコマンドは、正規表現を使用してテキストを検索し、一致する行を印刷する強力なテキスト検索ツールです.grepのフルネームはGlobal Regular Expression Printで、グローバル正規表現バージョンを表し、その使用権限はすべてのユーザーです.
grepコマンドのオプションは、検索プロセスの補完に使用されますが、そのコマンドのモードは非常に柔軟で、変数、文字列、正規表現です.注意しなければならないのは、モードにスペースが含まれている場合は、必ず二重引用符で引き起こしてください.
linuxシステムは3つの形式のgrepコマンドをサポートし、長男はgrep、標準、模倣の代表である.二番目の息子は多くの-egrepを爱して、略称はgrepコマンドを拡張して、実はgrep-Eと等価で、基本と拡張の正則表現を支持します.末っ子が走る最速-fgrepは、高速grepコマンドと略称され、grep-Fと等価であり、正規表現はサポートされず、文字列の表面の意味に従ってマッチングされる.
02.コマンドフォーマット
grep [options] PATTERN [FILE...]
grep [options] [-e PATTERN | -f FILE] [FILE...]
03.一般的なオプション
:
-E, --extended-regexp egrep
-F, --fixed-strings fgrep
-G, --basic-regexp
-P, --perl-regexp perl
-e, --regexp=PATTERN ,
-f, --file=FILE
-i, --ignore-case
-w, --word-regexp
-x, --line-regexp
-z, --null-data 0 ,
:
-s, --no-messages
-v, --invert-match
-V, --version
--help
--mmap use memory-mapped input if possible
:
-m, --max-count=NUM
-b, --byte-offset 。
-n, --line-number
--line-buffered
-H, --with-filename ,
-h, --no-filename ,
--label=LABEL print LABEL as filename for standard input
-o, --only-matching PATTERN
-q, --quiet, --silent
--binary-files=TYPE TYPE ;
TYPE `binary', `text', `without-match'
-a, --text
-I
-d, --directories=ACTION , , ,
-D, --devices=ACTION ,FIFO, , ,
-R, -r, --recursive
--include=PATTERN FILE_PATTERN
--exclude=PATTERN FILE_PATTERN
--exclude-from=FILE FILE
-L, --files-without-match ,
-l, --files-with-matches ,
-c, --count
-Z, --null FILE
:
-B, --before-context=NUM NUM
-A, --after-context=NUM NUM
-C, --context=NUM , NUM
-NUM -C
--color[=WHEN],
--colour[=WHEN] ;
-U, --binary ;
-u, --unix-byte-offsets CR , (MSDOS )
:
grep :
^ # :'^grep' grep 。
$ # :'grep$' grep 。
. # :'gr.p' gr , p。
* # :'*grep' grep 。
.* # 。
[] # , '[Gg]rep' Grep grep。
[^] # , :'[^A-FH-Z]rep' A-R T-Z , rep 。
\(..\) # , '\(love\)',love 1。
\< # , :'\
\> # , 'grep\>' grep 。
x\{m\} # x,m , :'0\{5\}' 5 o 。
x\{m,\} # x, m , :'o\{5,\}' 5 o 。
x\{m,n\} # x, m , n , :'o\{5,10\}' 5--10 o 。
\w # , [A-Za-z0-9], :'G\w*p' G , p。
\W #\w , , 。
\b # , : '\bgrep\b' grep。
POSIX :
,POSIX(The Portable Operating System Interface) , [:alnum:] [A-Za-z0-9] 。 [] , [A- Za-z0-9] [[:alnum:]]。 linux grep fgrep , POSIX 。
[:alnum:] #
[:alpha:] #
[:digit:] #
[:graph:] # ( 、 )
[:lower:] #
[:cntrl:] #
[:print:] # ( )
[:punct:] #
[:space:] # ( , , )
[:upper:] #
[:xdigit:] # (0-9,a-f,A-F)
04.参考例
4.1ファイル内の単語の検索
[deng@localhost share]$ grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[deng@localhost share]$
4.2複数のファイルで単語を検索
[deng@localhost test]$ grep "root" passwd passwd1
passwd:root:x:0:0:root:/root:/bin/bash
passwd:operator:x:11:0:operator:/root:/sbin/nologin
passwd1:root:x:0:0:root:/root:/bin/bash
passwd1:operator:x:11:0:operator:/root:/sbin/nologin
[deng@localhost test]$
4.3一致以外のすべての行を出力する
[deng@localhost test]$ grep -v "root" /etc/passwd
4.4マッチング部分の色表示
[deng@localhost test]$ grep "root" /etc/passwd --color=auto
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[deng@localhost test]$
4.5正規表現の使用
[deng@localhost test]$ grep -E "[1-9]+" /etc/passwd
または
[deng@localhost test]$ egrep "[1-9]+" /etc/passwd
4.6ファイルに一致する部分のみを出力する
[deng@localhost test]$ grep -o "root" /etc/passwd
root
root
root
root
[deng@localhost test]$
4.7統計ファイルまたはテキストに一致する文字列を含む行数
[deng@localhost test]$ grep -c "root" /etc/passwd
2
4.8一致する文字列を含む行番号を出力する
[deng@localhost test]$ grep -n "root" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[deng@localhost test]$
複数ファイルの照合
[deng@localhost test]$ grep -n "root" passwd passwd1
passwd:1:root:x:0:0:root:/root:/bin/bash
passwd:10:operator:x:11:0:operator:/root:/sbin/nologin
passwd1:1:root:x:0:0:root:/root:/bin/bash
passwd1:10:operator:x:11:0:operator:/root:/sbin/nologin
[deng@localhost test]$
4.9出力文字またはバイトオフセット
-b
文字またはバイトオフセットを表示[deng@localhost test]$ grep -b -o "root" /etc/passwd
0:root
11:root
17:root
366:root
[deng@localhost test]$
4.10複数のファイルを検索し、一致するテキストファイルを検索する
[deng@localhost test]$ grep -l "root" passwd passwd1
passwd
passwd1
[deng@localhost test]$
4.11マルチレベルディレクトリでテキストを再帰的に検索する
[deng@localhost test]$ grep -r "root" /etc
4.12大文字と小文字の検索を無視する
[deng@localhost test]$ grep -i "ROOT" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[deng@localhost test]$
4.13一致する複数の文字列を同時に指定する
[deng@localhost test]$ grep -e "root" -e "deng" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
deng:x:1000:1000:deng:/home/deng:/bin/bash
[deng@localhost test]$
4.14 grep検索結果に指定ファイルを含めるか除外する
ディレクトリ内のすべてphpと.htmlファイル内の再帰検索文字「main」
[deng@localhost test]$ grep -r "main" ./ --include *.{php,html}
検索結果からすべてのREADMEファイルを除外
[deng@localhost test]$ grep -r "main" ./ --exclude "README"
検索結果からfilelistファイルリストから除外されるファイル
[deng@localhost test]$ grep -r "main" ./ --exclude-from filelist
4.15何も表示しない
[deng@localhost test]$ grep -q "root" /etc/passwd
4.16 0値バイト接尾辞を使用するgrepとxargs
# :
echo "aaa" > file1
echo "bbb" > file2
echo "aaa" > file3
grep "aaa" file* -lZ | xargs -0 rm
# file1 file3,grep -Z 0 (\0),xargs -0 0 , ,-Z -l 。
4.17一致テキストの前または後の行を印刷する
結果に一致する3行を表示し、-Aオプションを使用します.
[deng@localhost test]$ seq 1 10 | grep "5" -A 3
5
6
7
8
[deng@localhost test]$
結果に一致する前の3行を表示し、-Bオプションを使用します.
[deng@localhost test]$ seq 1 10 | grep "5" -B 3
2
3
4
5
[deng@localhost test]$
結果に一致する最初の3行と後の3行を表示します.-Cオプションを使用します.
[deng@localhost test]$ seq 1 10 | grep "5" -C 3
2
3
4
5
6
7
8
[deng@localhost test]$
一致結果は複数あり、各一致結果間の区切り記号として「-」が使用されます.
[deng@localhost test]$ echo -e "a
b
c
a
b
c" | grep a -A 1
a
b
--
a
b
4.18ファイル内の空白行と非空白行を検索する
統計ファイル内の空白行の行数
[deng@localhost test]$ grep -c ^$ /etc/passwd
統計ファイルの空でないローの数
[deng@localhost test]$ grep -c ^[^$] /etc/passwd
46
[deng@localhost test]$
4.19 rootで始まるすべての行を出力する
[deng@localhost test]$ grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
[deng@localhost test]$
4.20 bashで終わるすべてのローを出力
[deng@localhost test]$ grep bash$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
deng:x:1000:1000:deng:/home/deng:/bin/bash
oracle:x:1001:1002::/home/oracle:/bin/bash
itcast:x:1002:1003::/home/itcast:/bin/bash
[deng@localhost test]$
4.21ファイルからキーワード検索を読み込む
[deng@localhost test]$ grep -f file /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[deng@localhost test]$ cat file
root
[deng@localhost test]$
説明:出力/etc/passwdファイルにfileファイルから読み出したキーワードを含む内容行
4.22正規表現をサポート
現在のディレクトリの下に表示する.txt末尾のファイル内の各文字列に少なくとも7つの連続小文字を含むすべての文字列の行
[deng@localhost test]$ grep '[a-z]\{7\}' *.txt
4.23 rootとdengに一致するすべての行を表示する
[deng@localhost test]$ grep -E "root|deng" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
deng:x:1000:1000:deng:/home/deng:/bin/bash
[deng@localhost test]$
4.24一致IPアドレス
X{m,n}マッチング文字X m-n回
[deng@localhost test]$ ifconfig ens33 |grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"
inet 192.168.1.104 netmask 255.255.255.0 broadcast 192.168.1.255
[deng@localhost test]$
4.25 rootまたはdengまたはitcastに一致する
[deng@localhost test]$ grep '\(root\|deng\|itcast\)' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
deng:x:1000:1000:deng:/home/deng:/bin/bash
itcast:x:1002:1003::/home/itcast:/bin/bash
[deng@localhost test]$
4.26 X{m,}マッチング文字X最低m回
[deng@localhost test]$ grep 'o\{2,\}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[deng@localhost test]$
4.27 X{m}マッチング文字X m回
[deng@localhost test]$ grep 'o\{2\}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[deng@localhost test]$
4.28+前の文字または文字列に1回または複数回一致
[deng@localhost test]$ grep 'root\+' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
4.29 ? 前の文字または文字列を0回または複数回一致させる
[deng@localhost test]$ grep 'root\?' /etc/passwd
[deng@localhost test]$ grep 'root\?' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[deng@localhost test]$
4.30メタ文字の特殊な意味を隠すために使用
// .
[deng@localhost test]$ ifconfig ens33 | grep '\.'
inet 192.168.1.104 netmask 255.255.255.0 broadcast 192.168.1.255
RX packets 102516085 bytes 13627338339 (12.6 GiB)
TX packets 145027 bytes 41135471 (39.2 MiB)
[deng@localhost test]$
4.31[]内の文字に一致する
文字'1'を含む文字列に一致する
[deng@localhost test]$ grep [1] /etc/passwd
「a」のように文字「a」を含む文字列に一致する
[deng@localhost test]$ grep '[a]' /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
文字'1'または'2'または'3'を含む文字列に一致する
[deng@localhost test]$ grep '[123]' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
文字シーケンスを使用して、「-」で文字シーケンスを表すこともできます.
文字'1'または'2'または'3'を含む文字列に一致する
[deng@localhost test]$ grep '[1-3]' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
文字'1'または'2'または'3'または'a'または'b'を含む文字列に一致する
[deng@localhost test]$ grep '[1-3a-b]' /etc/passwd
4.32 .任意の単一文字に一致
任意の2文字で始まり、3番目の文字は「3」です.
[deng@localhost test]$ grep '^..3' /etc/passwd
05.付録
参考:【Linux】一歩一歩Linuxシリーズチュートリアルのまとめ