2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

find・grepコマンド(初心者の個人メモ)

Posted at

入社1week目でわからなかったポイントを調べたもの。個人的メモ。

findコマンド

引用元:https://www.atmarkit.co.jp/ait/articles/1607/12/news021.html

ファイルを名前で検索する
出力内容を変更する(lsコマンドを実行する)

基本文法
find [オプション] [検索パス] [検索式]

「find」だけを実行するとカレントディレクトリ以下の全ファイルが表示される。
「find /etc」では「/etc」ディレクトリにある全てのファイルが表示される。

検索したいファイル名を指定

検索したいファイル名を指定する場合は、**「-name」オプション**を使う。
(ディレクトリも検索対象。)

ホームディレクトリ上**~で、ファイル名に「bash」を含むファイルを検索する場合は以下。
ワイルドカード
*をbashの前後に付けると、●●_bash.js や .bash●●といったファイルも検索対象に含むことができる。
ワイルドカードを指定しない場合はダブルクオート
"**をつけなくてもOK。

ワイルドカードを使った場合

find ~ -name "*bash*"

ワイルドカードを使わずファイル名決め打ちの場合

find ~ -name .bash_profile

※ この場合、ファイル名は完全一致にする必要あり。
例えば .bash_profile の . を入れ忘れていたり、拡張子がなかったりすると検索に引っかからない。

オプション

ディレクトリは含まず、ファイルだけを検索する
-type fオプション
例)hogeディレクトリ内の「profile.txt」を検索したい場合

find /hoge -name profile.txt -type f

ディレクトリを検索対象としたい場合は
-type dオプション

シンボリックリンクを対象とする場合は
**-type l**オプション

"Operation not permitted" のエラーメッセージを表示させないようにする

findを実行したところ、こんな感じの実行結果がたくさん出て実行結果が非常にわかりにくい。
sudo find ~ で実行しても同じだった。
find: /Users/ユーザー名/Library/Caches/CloudKit/com.apple.Safari: Operation not permitted

これは、検索場所に「/」を指定すると、権限のない場所も検索されて大量のエラーメッセージが表示されるので、「2>/dev/null」でエラーメッセージを“捨てる”(ヌルデバイスにリダイレクト)とよいでしょう。とのこと。

2>/dev/null でエラーメッセージを捨てる例

find /hoge -name profile.txt -type f 2>/dev/null

これで、権限のない場所の検索エラーメッセージは破棄され、純粋な検索結果のみが表示される。

出力内容を変更する(lsコマンドを実行する)

検索式の他に「アクション」を指定して実行できる。

-printアクション(デフォルト)
ファイル名を表示する

-lsアクション
ファイルの詳しい情報が表示される。
「ls -dils」コマンド相当で表示される情報で、ファイルサイズなどが含まれるためにかなり長くなる。

例)

 find ~ -name .bash_profile -type f -ls 2>/dev/null

実行結果

12902229406        8 -rw-r--r--    1 ユーザー名     staff                 629 Nov 24 17:56 /Users/ユーザー名/.bash_profile

「ls -dF」くらいの情報量でよい場合は「-exec」アクションを使い、「-exec ls -dF {} ;」のように指定します。
..とのこと。詳しくは引用元参照。

grepコマンド

引用元:
https://www.atmarkit.co.jp/ait/articles/1604/07/news018.html
https://eng-entrance.com/linux-command-grep

実行結果から必要な箇所だけを抽出する
単語単位で検索する
前後の行も検索する
行番号付きで表示する

基本文法
grep [オプション] 検索パターン ファイル
もしくは
コマンド | grep [オプション] 検索パターン
※[ ]は省略可能な引数

例) 「work」ディレクトリ内のファイルすべての中から「a」という文字を検索する場合
grep a work/*
grepでand(なおかつ)検索する
grep 検索文字列 ファイル名 | grep 検索文字列2

行番号付きで表示する

grepコマンドの検索結果に行番号を付けて表示したい場合は**-nオプション**を使用する。
grep -n 検索文字列 テキストファイル

例)「~/.ssh/hoge.txt」ファイルから「EA」という文字列を含む文字列を検索し、存在したらその行番号を表示する

grep -n EA ~/.ssh/hoge.txt

実行結果

2:asfasdfasdasdfasEAasdasdfasf
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?