私はファイルが多くのディレクトリにあるとしましょう。ディレクトリ内のすべてのファイルの内容を検索し、「ER」文字列を含めるが「Cheese」は含まない最も長い行を表示するにはどうすればよいですか?
私が知っている限り、私は1行のコマンドでこれをやろうとしています。
ディレクトリ内のすべてのファイルを検索するには、grep -rを繰り返し使用する必要があると思います。
grep -r -e "ER"
小さな希望で-v "cheese"を追加すると、もちろん動作しません。
1行のコマンドでこれは可能ではありませんか?それでは、複数行で何をすべきですか?
ベストアンサー1
以下はawkソリューションです。
awk '/ER/ && !/Cheese/ {if (length($0) > maxlen) { maxline=$0; maxlen=length($0);}} END {print maxlen, maxline;}' *
(最も長い行の長さも出力しますが、そうしたくない場合はただ... END {print maxline;}
。
Jeremy Doverのgrepソリューションに比べて利点は、入力を一度だけ渡すことです。欠点は、最大長が同じ複数行がある場合は最初の行だけが印刷されることです(または、長さを比較するために> =を使用する場合は最後の行)。 grepソリューションはすべての行を印刷します。