100자를 초과하고 "if"가 포함된 줄을 찾는 방법은 무엇입니까?

100자를 초과하고 "if"가 포함된 줄을 찾는 방법은 무엇입니까?

그래서 아마도 grep이것을 사용해야 할 것 같습니다. 재귀적으로 검색해야 할 때마다 를 사용해야 합니다 grep -r. 하지만 다음에 무엇을 해야 할지 모르겠습니다.

어떻게 해야 하나요?

답변1

(재귀) 및 (PCRE) 옵션을 grep지원하는 s를 사용 하거나 를 사용합니다 .-r-Ppcregrep-r

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

또는 POSIX적으로:

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

(동작은 텍스트가 아닌 파일(문자가 아닌 파일, 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

파이프로 연결된 두 개의 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자를 초과하지만 여전히 하나 이상의 문자를 포함하지 않는 줄은 선택되지 않습니다.만약에또한 선택되어 실패합니다.

printf '^%-100b$\n' 'if\nif' 'hey if' i if |
grep -nvxE '.{0,99}|([^i]|i[^f])*i*'

3:^hey if                                                                                              $
5:^if                                                                                                  $

그러나 2개를 사용하는 것이 grep더 나을 수도 있습니다 .

관련 정보