xargsとgrepを使用してディレクトリの内容を一覧表示する

xargsとgrepを使用してディレクトリの内容を一覧表示する

特定のパターンで名前が付けられたjsonファイルとpdfファイルがたくさんあるディレクトリがあります。\d{11}-\d\.(?:json|pdf)コマンドは、次のパターンを使用して名前でファイルをフィルタリングしようとしています。何らかの理由で動作しません。これは、xargsが引数を1つの大きな文字列行として使用するか、入力が分割されたときに空白、\ n、またはnull文字があるためだと思います。

ls | xargs -d '\n' -n 1 grep '\d{11}-\d\.(?:json|pdf)'

これを試みると、ls | xargs -d '\n' -n 1 grep '\d'数値を含むファイル名が選択され、複数の正規表現を指定すると一致するものはありません。

ベストアンサー1

まず、grepがファイル名のリストではなく、リストされls | xargs grep 'pattern'たファイルの内容からエントリを検索するようにします。lsファイル名を見つけるには、次のようにすれば十分です。

ls | grep 'pattern'

次に、grep '\d{11}-\d\.(?:json|pdf)'GNU grepおよび-Pオプションでのみ機能します。次の構文を使用してください - grepのGNU、busybox、およびFreeBSDの実装で動作します。

ls | grep -E '[[:digit:]]{11}-[[:digit:]]\.(json|pdf)'

第三、lsを解析するのは良い考えではありません。。使用 GNU find:

find . -maxdepth 1 -regextype egrep -regex '.*/[[:digit:]]{11}-[[:digit:]]\.(json|pdf)'

またはFreeBSDで以下を探してください:

find -E . -maxdepth 1 -regex '.*/[[:digit:]]{11}-[[:digit:]]\.(json|pdf)'

おすすめ記事