だから、おそらくこれにはgrep
を使うべきです。再帰的な検索が必要な限り、grep -r
。しかし、私は次に何をすべきか分かりません;)
どうやってやるの?
パイプで接続された2つのgrepsを使用できます。
grep -r '.\{100\}' /path | grep 'if'
パスまたは名前にif
が含まれるファイルを除外するには、':.*if'
の代わりに'if'
を使用します(ファイル名またはパスにコロンが含まれている場合でも壊れる可能性があります)。
-r
(再帰的)および-P
(PCRE)オプションをサポートするgrep
sを使用する(または-r
を使用するpcregrep
):
grep -rP '^(?=.{101}).*?if' .
またはPOSIXly:
find . -type f -exec awk 'length > 100 && /if/ {
print FILENAME ": " $0}' {} +
(動作は非テキストファイルの実装によって異なります(非文字、ゼロバイト値、長すぎる行、または最後の改行の後のデータを含むファイル)。また、一部のgrep
実装は、通常でないファイルまたはシンボリックリンクをたどります)。
$ 0のサイズと部分文字列の存在をカウントするには、awkを使用しますか?awk '( length($0) > 100 && index($0,"if") ){print}' file
「if」が(単純なサブストリングではなく)Wordである必要がある場合は、awk '( length($0) > 100 && match($0,/\<if\>/) ){print}' file
を使用できます。
から適応 特定の長さを超える行を検索 以下のいずれも100文字を超える行を検索するために機能します
grep '.\{100\}' file
Perl -nle 'print if length$_>99' file
awk 'length($0)>99' file
sed -n '/.\{100\}/p' file
好みの方法を選び、それをgrep if
単一のgrep
を使用:
grep -vxE '.{0,99}|([^i]|i[^f])*i*' <in >out
これは、どちらのステートメントでも先頭から末尾まで記述できない行のみを選択します。したがって、0〜99文字で構成されると記述できる行は選択されません。同様に、99文字を超えているにもかかわらず、少なくとも1つのifが含まれていない行は選択されます。また、選択に失敗します。
printf '^%-100b$\n' 'if\nif' 'hey if' i if |
grep -nvxE '.{0,99}|([^i]|i[^f])*i*'
3:^hey if $
5:^if $
ただし、2つのgrep
sを使用する方が良い場合があります。