간단한 정규식과 일치합니다.

간단한 정규식과 일치합니다.

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}' {} +

greptxt 파일당 하나의 명령을 실행하지 않으려면.

-type f디렉토리나 심볼릭 링크 또는 장치에서 텍스트를 검색하지 않으려면 a를 추가하는 것을 고려할 수도 있습니다 . (물론 이름이 거의 없다는 데 동의하지만(심볼릭 링크 제외) *.txt)

또한 -o옵션은 grepGNU에 따라 다르며 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'으로 추가했습니다.

관련 정보