txt で終わるファイルで (tt\d{1,10}) を一致させる必要があります。
私はgrepとack-grepを試しましたが、結果はありませんでした。
ack-grep -G \.txt$ -g "(tt\d{1,10})"
答え1
を使用すると、ack-grep
以下を探しているようです。
ack-grep -uhoG '\.txt$' 'tt\d{1,10}'
find
これは "end up with" コマンドとほぼ同じで、次のように最適化できます。
find . -name '*.txt' -exec grep -Eo 'tt[0-9]{1,10}' {} +
grep
txtファイルごとに1つのコマンドを実行したくない場合。
-type f
ディレクトリ、シンボリックリンク、またはデバイスからテキストを検索したくない場合は、aを追加することも検討できます。 (もちろん名前がほとんどないことに同意するが(シンボリックリンクを除く)*.txt
)
また、-o
オプションはgrep
GNUによって異なり、GNU grepには-r
ディレクトリを再帰的に検索するオプションもありますが、以前のバージョンのGNU grepはディレクトリへのシンボリックリンクでリンクされているため、最新find
バージョンがない場合は注意してくださいgrep
。
答え2
find
私はこの種の作業に使用し、一致grep
するファイルで実行するようにします。上記の@dubiousjimの正規表現を使用すると、次のようになります。
find ./ -name "*.txt" -exec grep -Hn --color=auto 'tt[0-9]\{1,10\}' {} \;
修正する
複雑すぎて申し訳ありませんが、もう一度戻ってオプションについてさらに詳しく説明する必要があると思いました...上記のコマンド
はfind
、本質的に「-exec」オプションを介して1つにマージされた2つの別々のコマンドです。
この最初のポイントがかなり自明であることを願っています。
find ./ -name "*.txt"
ただし、find-exec
サブコマンドには独自の特殊構文があります。以下のように対応するオプション{}
によって異なります。完全に一致するパス名に置き換えられ、execプログラムのコマンドライン引数の終わりを示します(この場合)。find
-exec
\;
{}
\;
grep
grep -Hn --color=auto 'regex' {} \;
私は、一致する各式に対してgrep -r
色、行番号(-n
)、およびファイル名()を印刷して.xの外観を複製しようとするこのオプションを使用しています。-H
エイリアスはexec'd by commandでは機能しないため、find
手動'--color=auto'
で追加しました。