📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の7版が非表示)
2行目: 2行目:
<code>grep</code>コマンドとは、ファイル中の文字列に対して、正規表現を使って検索して表示するコマンドである。<br>
<code>grep</code>コマンドとは、ファイル中の文字列に対して、正規表現を使って検索して表示するコマンドである。<br>
ここでは、grepの基本操作を記載する。<br>
ここでは、grepの基本操作を記載する。<br>
<br><br>
== grepのインストール ==
多くのLinuxディストリビューションでは、標準でgrepがインストールされている。<br>
もし、別途インストールする必要がある場合、ソースコードからgrepをインストールする。<br>
<br>
まず、grepのビルドに必要なライブラリをインストールする。<br>
# RHEL
sudo dnf install make gcc gcc-c++ glibc-devel pcre2-devel
# SUSE
sudo zypper install make gcc gcc-c++ glibc-devel pcre2-devel
<br>
[https://ftp.gnu.org/gnu/grep/ GNUソフトウェアの公式Webサイト]にアクセスして、ソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍する。<br>
tar xf grep-<バージョン>.tar.xz
cd grep-<バージョン>
<br>
grepをビルドおよびインストールする。<br>
mkdir build && cd build
../configure --prefix=<grepのインストールディレクトリ>
make -j $(nproc)
make install
<br>
~/.profileファイル等に、環境変数<code>PATH</code>を追記する。<br>
vi ~/.profile
<br>
<syntaxhighlight lang="sh">
# ~/.profileファイル
export PATH="/<grepのインストールディレクトリ>/bin:$PATH"
</syntaxhighlight>
<br><br>
<br><br>


10行目: 43行目:
  grep <検索正規表現> <ファイル名>
  grep <検索正規表現> <ファイル名>
<br>
<br>
例えば、testディレクトリ内の全てのファイルから、aという文字を検索する場合を以下に示す。<br>
以下の例では、testディレクトリに存在する全てのファイルから、hogeという文字列を検索している。<br>
  grep a test/*
<code>-n</code>オプションを付加することで、マッチしたファイルの行番号も表示する。<br>
<code>-r</code>オプションを付加することで、サブディレクトリに存在するファイルも再帰検索する。<br>
  grep "hoge" -nr test/*
<br>
<br>
===== grepコマンドのand検索 =====
===== grepコマンドのand検索 =====
grepコマンドでは、2つ以上の条件を設定して検索するand検索ができる。<br>
grepコマンドでは、2つ以上の条件を設定して検索するand検索ができる。<br>
148行目: 184行目:
  grep -L a test/*
  grep -L a test/*
<br><br>
<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>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]