名前にtxt
スペースや特殊文字(例:#
。
があるが存在しないすべての項目を一覧表示するgrep
ソリューションがあります。grep -L "cannot have" $(grep -l "must have" *.txt)
must have
cannot 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に変換できます。)