指定された数字と文字列のみを含むファイルを見つける必要があります。伊藤が発見した856ワイルドカード文字で囲みます*856*
。
たとえば、私はこれを持っていますファイルA.txt数千の数字があります。
45423542354235423542
5423543542353254235
345435245243
435435345
452345345
4523543455454
このスクリプトがあります。
#!/bin/sh
findFile() {
while read -r LINE
do
printf "$LINE\n"
grep -il "$LINE" *856*
printf "\n"
done < /path/to/fileA.txt > /path/to/result.txt
}
findFile
編集する:ファイル名にfileA.txt
。
希望の出力:
45423542354235423542
found_file_856_COMPANY_FFW3443E.dat
5423543542353254235
found_file_856_COMPANY_43R43F.dat
345435245243
found_file_856_COMPANY_77Y85HHH.dat
435435345
found_file_856_COMPANY_64Y76H6.dat
452345345
found_file_856_COMPANY_9630GGTFVF.dat
4523543455454
found_file_856_COMPANY_2R98JD925.dat
答え1
ファイル名に改行がないと仮定すると...
「-files」リストを作成し、856
それを使用して目的grep
のファイルをフィルタリングします。
find . -name '*856*' > filelist
grep -Ff fileA.txt filelist >result.txt
このgrep
コマンドは文字列をパターンとして使用し、その文字列と一致する名前を抽出しますfileA.txt
。filelist
このフラグは、文字列が(正規表現ではなく)固定文字列として解釈されることを-F
保証します。fileA.txt
fileA.txt
たとえば、プレフィックスを追加し、_
サフィックス.dat
を追加してパターンをより具体的に指定する必要があります。
sed -e 's/^/_/' -e 's/$/.dat' fileA.txt >fileB.txt
その後、代わりにfileB.txt
withを使用できます。grep
fileA.txt
答え2
あなたの質問で何を求めているのか(例:何を達成しようとしていますか?)、またはどの種類のシェルを使用しているのかは不明です。残念ながら私は代理人を持っていません。コメント。
シェルを使用していると仮定すると、bash
現在のフォルダに文字列856を含むすべてのファイルを返すワイルドカードパターンを見つける場合は、これが*856*
正しい方法です。
sausages
明確にするために、名前にその文字列を含むすべてのファイルを検索するには、snacks_for_later
次のようにします。
$ grep sausages *snacks_for_later*
ソーセージを探してください。
正しいファイルから検索していることを確認するには、lsを使用してワイルドカードパターンをテストできます。
$ ls *856*
ファイルがあるフォルダーでコマンドを実行しない場合は、/path/to/allfiles/*856*
grepおよびlsパターンを使用する必要があります。グローバルパターン(例: "*")はディレクトリを巡回しません。