bash에서 grep /egrep을 사용하여 두 따옴표 사이의 모든 탭 문자를 찾습니다.
나는 노력했다
grep -r . -e "\".*\t.*\""
grep -r . -e "\".*\\t.*\""
grep -r . -e "\".*\\\\t.*\""
grep -r . -e '\".*\t.*\"'
grep -r . -e '\".*\\t.*\"'
grep -r . -e '".*\t.*"'
grep -r . -e '".*\\t.*"'
하지만 원하는 결과를 얻지 못합니다. 다음 은 다음 grep
이 포함된 모든 행을 생성합니다 \t
.
grep -r . -e "\".*\\\\t.*\""
grep -r . -e '\".*\\t.*\"'
grep -r . -e '".*\\t.*"'
다음 은 다음 grep
이 포함된 모든 행을 생성합니다 t
.
grep -r . -e "\".*\t.*\""
grep -r . -e "\".*\\t.*\""
grep -r . -e '".*\t.*"'
grep -r . -e '\".*\t.*\"'
그러나 이들 중 어느 것도 실제 표 작성 기계를 찾지 않습니다. 내가 뭘 잘못했나요?
답변1
GNU (당신이 사용하고 있다고 가정)는 grep
기본적으로 \t
탭에 대해 알지 못합니다. POSIX 정규 표현식에서는 \t
리터럴이 일치 t
하고 \\t
일치합니다 \t
.
텍스트 탭 문자를 POSIX 정규 표현식과 일치시키려면 표현식에 탭 문자를 삽입하십시오.
grep -r $'".*\t.*"' .
이는 문자열의 이스케이프 시퀀스를 C 언어의 해당 의미로 $'...'
확장하는 데 사용됩니다 .bash
-P
GNU에서 Perl과 유사한 정규 표현식(PCRE)을 활성화하면 표현식의 탭 문자를 grep
인식합니다 .\t
grep -P -r '".*\t.*"' .
또한 귀하의 표현이 일치한다는 점에 유의하십시오.
"hello" <tab> "world"