特定の文字/数字で始まり、終了しますが、ファイル内の特定の文字列も含むファイル名を一覧表示するシェルスクリプトを作成する方法を見つけようとしています。
ファイル名は数字で始まり、文字で終わる必要がありますが、ファイルには「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が返されて実行されます。ここでは、コンポーネントにパイプされたコマンドで見つかったファイルを表します。戻り値が一致しない場合、返されるので実行されません。grep
xyz
-q
grep
0
echo $line
$line
find
while
grep
1
echo $line