grepが特殊ファイル名を処理できるようにする

grepが特殊ファイル名を処理できるようにする

名前にtxtスペースや特殊文字(例:#

があるが存在しないすべての項目を一覧表示するgrepソリューションがあります。grep -L "cannot have" $(grep -l "must have" *.txt)must havecannot have

abc defg.txtたとえば、1行だけを含むファイルがありますmust have

したがって、通常、grepソリューションはを見つける必要がありますabc defg.txtが、次のように返します。

grep: abc: No such file or directory
grep: defg.txt: No such file or directory

含まれているファイル名については、#grepソリューションが機能しないと思います。

誰でもgrepソリューションを修正するのに役立ちますか?

ベストアンサー1

もしさらに進みたい場合は、awkを使用して一度にすべての操作を実行できます。

awk 'function s(){if(a&&!b){print f}} FNR==1{s();f=FILENAME;a=b=0} 
  /must have/{a=1} /cannot have/{b=1} END{s()}' filepattern

最近のgawkでは、BEGINFILEとENDFILEを使用して単純化できます。 (すべてのawk回答と同様に、-fを使用してawkコマンドをファイルに入れることができ、ほとんどの場合と同様に、必要に応じて簡単にPerlに変換できます。)

おすすめ記事