txt로 끝나는 파일에서 (tt\d{1,10})를 일치시켜야 합니다.
나는 grep과 ack-grep을 시도했지만 결과가 없었습니다.
ack-grep -G \.txt$ -g "(tt\d{1,10})"
답변1
을(를) 사용하면 ack-grep
다음을 찾고 있는 것 같습니다.
ack-grep -uhoG '\.txt$' 'tt\d{1,10}'
find
이는 "end up with" 명령 과 거의 동일하며 , 다음과 같이 최적화할 수 있습니다.
find . -name '*.txt' -exec grep -Eo 'tt[0-9]{1,10}' {} +
grep
txt 파일당 하나의 명령을 실행하지 않으려면.
-type f
디렉토리나 심볼릭 링크 또는 장치에서 텍스트를 검색하지 않으려면 a를 추가하는 것을 고려할 수도 있습니다 . (물론 이름이 거의 없다는 데 동의하지만(심볼릭 링크 제외) *.txt
)
또한 -o
옵션은 grep
GNU에 따라 다르며 GNU grep에는 -r
디렉토리를 재귀적으로 검색하는 옵션도 있지만 이전 버전의 GNU grep은 디렉토리에 대한 심볼릭 링크로 연결되므로 find
최신 버전이 없는 경우 주의하십시오 grep
.
답변2
find
나는 이런 종류의 일 을 위해 사용 하고 grep
일치하는 파일에서 실행하도록 합니다. 위의 @dubiousjim의 정규식을 사용하면 다음과 같습니다.
find ./ -name "*.txt" -exec grep -Hn --color=auto 'tt[0-9]\{1,10\}' {} \;
고쳐 쓰다
너무 복잡하게 해서 미안하지만 다시 돌아가서 옵션에 대해 더 자세히 설명해야겠다고 생각했습니다...
위 find
명령은 본질적으로 "-exec" 옵션을 통해 하나로 병합된 두 개의 별도 명령입니다.
이 첫 번째 요점이 상당히 자명하기를 바랍니다.
find ./ -name "*.txt"
그러나 find -exec
하위 명령에는 고유한 특수 구문이 있습니다. 아래와 같이 해당 옵션 {}
에 따라 다릅니다 . 완전히 일치하는 경로 이름으로 대체되며 exec 프로그램에 대한 명령줄 인수의 끝을 나타냅니다(이 경우 ) .find
-exec
\;
{}
\;
grep
grep -Hn --color=auto 'regex' {} \;
저는 일치하는 각 표현식에 대해 grep -r
색상, 줄 번호( -n
) 및 파일 이름( ) 을 인쇄하여 .x의 모양을 복제하려고 이 옵션을 사용하고 있습니다. -H
별칭은 exec'd by command에서 작동하지 않으므로 find
수동 '--color=auto'
으로 추가했습니다.