ワイルドカードで囲まれた文字列に一致するファイルのみを見つけるためにgrepする方法

ワイルドカードで囲まれた文字列に一致するファイルのみを見つけるためにgrepする方法

指定された数字と文字列のみを含むファイルを見つける必要があります。伊藤が発見した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.txtfilelistこのフラグは、文字列が(正規表現ではなく)固定文字列として解釈されることを-F保証します。fileA.txt

fileA.txtたとえば、プレフィックスを追加し、_サフィックス.datを追加してパターンをより具体的に指定する必要があります。

sed -e 's/^/_/' -e 's/$/.dat' fileA.txt >fileB.txt

その後、代わりにfileB.txtwithを使用できます。grepfileA.txt

おすすめ記事