英数字のみを含むファイルを検索するには?

英数字のみを含むファイルを検索するには?

英数字と文字のみを含むファイルを見つける方法は[áéíóúñ.,¿?¡!()]

スクリプトや他のものとは別にアーカイブする必要がある希少なプレーンテキストファイルがいくつかあります。これはスペインの詩であるため、含まれません[#></:]。私はそれを取ります。

sudo find . -type f -not -path '*/.??*/*' -exec file {}  \; \
  | grep ": Unicode text, UTF-8 text"$ \
  | cut -d: -f1 \
  | while read file; do 
     grep -iv '[a-z0-9\.\/_\-áéíóúñ]' "$file" || echo $file
    done

ただし、行が一致するため、ファイル全体を一致させる必要があります。

編集:少なくとも私に効果があったのは次のとおりです。

sudo find . -type f -not -path "*/.Trash-*/*" -not -path '*/.??*/*' -exec file {} \;|
grep ": Unicode text, UTF-8 text"$|
cut -d: -f1|
while read file do 
grep -ivq "^[a-z0-9\.\/_\-\ \,\"áéíóúñ\!¿¡?\(\)]*$" "$file"||
echo "$file">>/tmp/textlocation ; done

^と$を追加する簡単な解決策は違いを生み出します。ここにリストされている-Lソリューションはうまく機能し、よりエレガントになるかもしれませんが、私のソリューションはそのタスクを実行しました。

ベストアンサー1

私が正しく理解した場合は、GNUを使用してgrep次のファイルを検索できます。矛盾[#></:]文字セット:

$ grep -Lr '[#></:]'
  • -Lパターンと一致しないファイルを一覧表示

    -L, --files-without-match は
    通常の出力を抑制し、代わりに通常印刷されない各入力ファイルの名前を出力します。検索は最初の一致で停止します。

  • -r再帰的に検索します。

    -r、--recursive
    コマンドラインにある場合にのみ、シンボリックリンクに沿って各ディレクトリの下のすべてのファイルを繰り返し読み込みます。ファイルオペランドが指定されていない場合、grepは作業ディレクトリを検索します。これは -d 再帰オプションと同じです。

-Zファイルのリスト以外の操作を実行する必要がある場合でも、このオプションを追加できます。

おすすめ記事