だからおそらくgrep
これを使うべきだと思います。再帰的に検索する必要があるたびにを使用する必要がありますgrep -r
。しかし、次に何をすべきかわかりません。
どうすればいいですか?
答え1
(再帰)および(PCRE)オプションをgrep
サポートするsを使用するか、を使用します。-r
-P
pcregrep
-r
grep -rP '^(?=.{101}).*?if' .
またはPOSIXとして:
find . -type f -exec awk 'length > 100 && /if/ {
print FILENAME ": " $0}' {} +
(動作は非テキストファイル(文字ではないファイル、ゼロバイト値、長すぎる行、または最後の改行以降のデータを含むファイル)の実装によって異なりますgrep
。注意してください。ファイルを削除するか、シンボリックリンクに従います。
答え2
awkを使用して、$ 0のサイズと部分文字列の存在を計算します。
awk '( length($0) > 100 && index($0,"if") ){print}' file
「if」が単純な部分文字列ではなく単語である必要がある場合は、次のものを使用できます。
awk '( length($0) > 100 && match($0,/\<if\>/) ){print}' file
答え3
パイプで接続された2つのgrepを使用できます。
grep -r '.\{100\}' /path | grep 'if'
if
パスまたは名前に含まれるファイルを除外するには、':.*if'
代わりに使用してください'if'
(ファイル名またはパスにコロンが含まれている場合はまだ中断される可能性があります)。
答え4
一つgrep
:
grep -vxE '.{0,99}|([^i]|i[^f])*i*' <in >out
いずれかのステートメントで最初から最後まで説明できない行のみが選択されます。したがって、0〜99文字で構成されると説明できる行は選択されず、同様に99文字を超えるがまだ1つ以上の文字を含まない行は選択されません。もしまた、選択して失敗します。
printf '^%-100b$\n' 'if\nif' 'hey if' i if |
grep -nvxE '.{0,99}|([^i]|i[^f])*i*'
3:^hey if $
5:^if $
ただし、2つを使用する方がgrep
良いかもしれません。