Linuxでテキストファイル内のすべての一致を検索する方法は?

Linuxでテキストファイル内のすべての一致を検索する方法は?

検索する文字列が23個あり、その文字列をファイルに返したいと思います。

次のコードを取得しました。

users='User1\|User2\|User3\|User4\|User5\|User6\|User7\|User8\|User9\|User10\|User11\|User12..User23'

希望の出力:

User1 is in the file
User2 is not in the file
...
User 23 is in the file

どうすればいいのかわかりません。配列を考えていますが、可能であればいくつかのヒントを得たいと思います。よろしくお願いします。

ベストアンサー1

配列を使用して下さい:

users=(User1 User2 User3 User4) # et cetera
for i in "${users[@]}"; do
    echo -n "$user is "
    if grep -q "$user" inputfile; then
        echo "present"
    else
        echo "not present"
    fi
done

grep -q検索は実行されますが、出力は返されないため、ifテストで自動的に使用できます。

または、各ユーザーを名前付きファイルに入れUsersたら、次の操作を実行できます。

grep -o -f Users inputfile

これにより、見たすべてのユーザーのリストが出力されます。現在のユーザーと不在ユーザーを表示するには:

echo "Users present:"
grep -o -f Users inputfile
echo "Users absent:"
grep -vo -f Users inputfile

おすすめ記事