📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| 150行目: | 150行目: | ||
例えば、testディレクトリ内の全てのファイルから、aを検索した結果、該当しなかったファイルを表示する場合は、以下のようにする。<br> | 例えば、testディレクトリ内の全てのファイルから、aを検索した結果、該当しなかったファイルを表示する場合は、以下のようにする。<br> | ||
grep -L a test/* | grep -L a test/* | ||
<br><br> | |||
== grepコマンドを使用したフィルタリング == | |||
==== 特定の文字列を含む行のみを表示する ==== | |||
コマンドの出力結果や単一・複数のファイルから、特定の文字列を含む行を検索してその行を表示するには、grepコマンドを使用する。<br> | |||
<br> | |||
grepコマンドは、指定した文字列を含む行を検索して、その文字列を含む行のみを表示する。<br> | |||
指定した文字列が見つからなかった場合は、何も表示しない。<br> | |||
grep <検索パターン> # grepコマンドで特定の文字列を含む行のみを抽出する | |||
<br> | |||
以下の例では、テキストファイルから検索パターンを含む行を表示している。<br> | |||
cat test.txt | |||
abc | |||
def | |||
ghi | |||
<br> | |||
grep 'i' test.txt | |||
ghi | |||
<br> | |||
検索パターンが含まれる行が見つかった場合は、終了ステータスは0になる。<br> | |||
echo $? | |||
0 | |||
<br> | |||
以下の例では、検索パターンaまたはzを含む行を表示している。(正規表現)<br> | |||
grep '[az]' test.txt | |||
abc | |||
<br> | |||
以下の例では、検索パターンfからlのいずれかの文字を含む行を表示している。(正規表現)<br> | |||
<code>[]</code>の中に<code>-</code>(ハイフン)で検索する文字の範囲を指定する。<br> | |||
grep '[f-l]' test.txt | |||
def | |||
ghi | |||
<br> | |||
以下の例では、行全体が特定のパターンと一致する行を表示している。(正規表現)<br> | |||
grep '^abc$' test.txt | |||
abc | |||
<br> | |||
また、パターンと行全体が完全一致する行の検索は、<code>-x</code>オプションを指定することでも可能である。<br> | |||
grep -x 'abc' test.txt | |||
abc | |||
<br> | |||
以下の例では、OR条件を使用した検索を行っている。(正規表現)<br> | |||
<code>-E</code>オプションを指定することで拡張正規表現が使用できるようになる。<br> | |||
<u>正規表現を使用する場合は、常に、<code>-E</code>オプションを指定するようにしたほうがよい。</u><br> | |||
grep -E 'a|z' test.txt | |||
abc | |||
<br> | |||
grep -E 'a|m|z' test.txt | |||
abc | |||
<br> | |||
以下の例では、複数のファイルを対象とした検索を行っている。<br> | |||
検索対象となるテキストファイルは、以下の2つ(test1.txt、test2.txt)を使用する。<br> | |||
cat test1.txt | |||
abc | |||
def | |||
ghi | |||
cat test2.txt | |||
ABC | |||
DEF | |||
GHI | |||
<br> | |||
以下の例では、複数のファイルからパターンを含む行を検索して表示している。<br> | |||
対象ファイルにワイルドカードを指定して、検索対象に複数ファイルを指定している。<br> | |||
この場合、単一ファイルからの検索とは異なり、結果表示に該当ファイル名が含まれる。<br> | |||
grep -i 'abc' test* | |||
test1.txt:abc | |||
test2.txt:ABC | |||
<br> | |||
また、引数に複数のファイルを指定することもできる。<br> | |||
grep -i 'abc' test1.txt test2.txt | |||
test1.txt:abc | |||
test2.txt:ABC | |||
<br> | |||
==== 特定の文字列を含まない行のみを表示する ==== | |||
コマンドの出力結果または単一・複数のファイルから、特定の文字列を含まない行を検索してその行を表示するには、<br> | |||
<code>grep</code>コマンドの<code>-v</code>オプションを使用する。<br> | |||
grep -v <検索パターン> # grepコマンドと-vオプションで特定の文字列を含まない行のみを抽出する | |||
<br> | |||
cat test.txt | |||
abc | |||
def | |||
ghi | |||
<br> | |||
以下の例では、<code>-v</code>オプションに指定したaが含まれない行のみ表示している。<br> | |||
grep -v 'a' test.txt | |||
def | |||
ghi | |||
<br> | |||
==== 行番号を付加して表示する ==== | |||
<code>grep</code>コマンドは、<code>-n</code>オプションを指定することにより、実行結果の先頭に行番号を付加して表示することができる。<br> | |||
grep -n <検索パターン> # grepコマンドと-nオプションで検索結果に行番号を付加する | |||
<br> | |||
cat test.txt | |||
abc | |||
def | |||
ghi | |||
<br> | |||
grep -n 'i' test.txt | |||
3:ghi | |||
<br> | |||
検索せずに、テキストファイルに行番号を付加したい場合は、<code>-n</code>オプションを付加して検索パターンに<code>''</code>(空文字)を指定する。<br> | |||
空文字で検索すると全ての行と一致するため、テキストファイルの全行に行番号が付加された状態で出力される。<br> | |||
grep -n '' test.txt | |||
1:abc | |||
2:def | |||
3:ghi | |||
<br> | |||
==== A行からB行までを切り出す ==== | |||
テキストファイル等から、<検索パターン1>を含む行から<検索パターン2>を含む行までを表示するには、<br> | |||
<code>grep</code>コマンドの<code>-A</code>オプションと<code>-B</code>オプションを組み合わせて使用する。<br> | |||
grep -A <行数1> '<検索パターン1>' <検索するファイル> | grep -B <行数2> '<検索パターン2>' # grepコマンドの-Aオプションと-Bオプションで特定の2行の行間を表示する | |||
<br> | |||
* -Aオプション | |||
*: 指定した文字列と一致した行から下のn行を取得するオプションである。 | |||
* -Bオプション | |||
*: -Aオプションとは逆に、指定した文字列と一致した行から上のn行を取得するオプションである。 | |||
<br> | |||
以下の例では、<code>-A</code>オプションで'hogehoge'の行から下の<行数1>までを切り出して、<br> | |||
<code>-B</code>オプションで'fugafuga'を含む行から上の<行数2>までの'hogehoge'を含む行までを切り出している。<br> | |||
<br> | |||
ただし、最下行までと最上行までを取得するためにオプションに1000000と指定しているため、<br> | |||
対象となるデータが1000000行を超えている場合は対応できない。<br> | |||
(1000000行を超えるテキストファイルを扱う機会は稀なので、ほぼ問題はない)<br> | |||
cat test.txt | |||
abc | |||
def | |||
ghi | |||
jkl | |||
mno | |||
pqr | |||
<br> | |||
grep -A 1000000 'i' test.txt | grep -B 1000000 'n' | |||
ghi | |||
jkl | |||
mno | |||
<br> | |||
厳密な処理を行う場合、事前に<code>wc -l</code>コマンドで対象となるテキストファイルの総行数を取得して、その値を指定するとよい。<br> | |||
(取得する行間の行数が総行数を超えることがないため)<br> | |||
<br> | |||
また、対象となるデータに範囲指定に使用する文字列が複数行含まれている場合は対応できない。<br> | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]] | [[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]] | ||