grepを使用して特殊文字で始まる行を一致させるには?

grepを使用して特殊文字で始まる行を一致させるには?

私のディレクトリに「=」で始まる行を含む多くの.txtファイルがあります。

例:a.txtには次の行があります(開始部分にスペースを含めます)。

        =putSomething here;

上記の行に一致するgrepクエリをどのように書くことができますか?私は次を試しました。

find . -name "*.txt" | xargs grep -rn "^[=].*$"

ベストアンサー1

このサンプルファイルを見てみましょう。

$ cat file.txt
        =putSomething here;

.txt現在のディレクトリでこれらのファイルをすべて見つけるには、次の手順を実行します。

$ grep -n '^[[:space:]]*=' *.txt
file.txt:1:        =putSomething here;

.txt現在のディレクトリでこれらのファイルをすべて探したい場合すべてのサブディレクトリ、以下を使用します。

$ grep -rn '^[[:space:]]*=' --include '*.txt'
subdir/another.txt:1:        =putSomething here;
file.txt:1:        =putSomething here;

ノート

  1. findそしてxargsここでは必要ありません。この-rオプションを使用すると、grepサブディレクトリを繰り返し検索できます。

  2. --include '*.txt'grepglobに一致するファイルを制限します*.txt

  3. ^行の先頭に一致します。 [[:space:]]*ゼロ個以上の空白文字と一致します。 =等号と一致します。 POSIX正規表現には特別な内容がないため、=他の文字と同じように処理できます。

  4. grep regex を終了しても.*$一致する行は変更されません。 .*$後ろに文字がある場合、または文字がない場合は一致します。使用する唯一の理由.*$は、grepが強調表示する一致するテキストを変更することです。

おすすめ記事