特定の名前と特定の文字列を含むファイルのリスト

特定の名前と特定の文字列を含むファイルのリスト

特定の文字/数字で始まり、終了しますが、ファイル内の特定の文字列も含むファイル名を一覧表示するシェルスクリプトを作成する方法を見つけようとしています。

ファイル名は数字で始まり、文字で終わる必要がありますが、ファイルには「xyz」も含める必要があるとします。結果がファイル名になるようにどのように計算できますか?

ファイル名は現在のディレクトリにあります。

別々に取得する方法は知っていますが、2つを組み合わせて正しい結果を得る方法はわかりません。

例:ファイル名のリスト:
- "F"で始まり、数字で終わります。
- ファイルに「xyz」が含まれています。
file1 = "xyz"
file2 = "xyz"
file3 = "xyz"
Tile4 = "xyz"
file = "xyz"

File1とFile3のみが基準を満たすため、ここにリストされています。

答え1

grep -l 'xyz' F*[0-9]

名前が「F」で始まり、数字で終わるすべてのファイルでxyzを探します。この-lスイッチを使用すると、Grepは一致する行を抑制し、一致するファイルのみを報告します。

答え2

#!/bin/bash
find . -name "F*[[:digit:]]" | while read line; do 
    grep -q xyz $line 
    if [ $? -eq 0 ]; then 
        echo $line 
    fi;  done

上記のコードは現在のディレクトリでF数字で始まり、終わるファイルを探します。次に、基準を通過する各ファイルを繰り返し、文字列を見つけるためにファイル内のfind各繰り返しが実行されます。 .grep出力が印刷されないためです。その後、コマンドのエラー状態を確認してください。ファイルに一致するエントリがある場合は、grepが返されて実行されます。ここでは、コンポーネントにパイプされたコマンドで見つかったファイルを表します。戻り値が一致しない場合、返されるので実行されません。grepxyz-qgrep0echo $line$linefindwhilegrep1echo $line

関連情報