그래서 아마도 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}' {} +
(동작은 텍스트가 아닌 파일(문자가 아닌 파일, 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
더 나을 수도 있습니다 .