web-dev-qa-db-ja.com

100文字を超え、 "if"を含む行を検索するにはどうすればよいですか?

だから、おそらくこれにはgrepを使うべきです。再帰的な検索が必要な限り、grep -r。しかし、私は次に何をすべきか分かりません;)

どうやってやるの?

8
pushandpop

パイプで接続された2つのgrepsを使用できます。

grep -r '.\{100\}' /path | grep 'if'

パスまたは名前にifが含まれるファイルを除外するには、':.*if'の代わりに'if'を使用します(ファイル名またはパスにコロンが含まれている場合でも壊れる可能性があります)。

8
choroba

-r(再帰的)および-P(PCRE)オプションをサポートするgrepsを使用する(または-rを使用するpcregrep):

grep -rP '^(?=.{101}).*?if' .

またはPOSIXly:

find . -type f -exec awk 'length > 100 && /if/ {
   print FILENAME ": " $0}' {} +

(動作は非テキストファイルの実装によって異なります(非文字、ゼロバイト値、長すぎる行、または最後の改行の後のデータを含むファイル)。また、一部のgrep実装は、通常でないファイルまたはシンボリックリンクをたどります)。

13

$ 0のサイズと部分文字列の存在をカウントするには、awkを使用しますか?
awk '( length($0) > 100 && index($0,"if") ){print}' file

「if」が(単純なサブストリングではなく)Wordである必要がある場合は、awk '( length($0) > 100 && match($0,/\<if\>/) ){print}' fileを使用できます。

12
Dani_l

から適応 特定の長さを超える行を検索 以下のいずれも100文字を超える行を検索するために機能します

grep '.\{100\}' file

Perl -nle 'print if length$_>99' file

awk 'length($0)>99' file

sed -n '/.\{100\}/p' file

好みの方法を選び、それをgrep if

4
David King

単一の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つのgrepsを使用する方が良い場合があります。

3
mikeserv