sed \1\2\3과 같은 그룹을 grep하는 방법을 배우려고 하는데 문제가 있습니다. 예를 들어 /etc/services 파일을 필터링하여 모든 포트를 구분합니다. 내가 하는 일:
~$ grep -E '[0-9]{1,5}/(tcp|udp)' /etc/services
이제 "포트/프로토콜"이 표시됩니다. 다음으로 그룹화하려고 합니다.
~$ grep -E '\([0-9]{1,5}\)/(tcp|udp)' /etc/services
효과가 없습니다. 음, 확장되지 않은 grep을 시도해 보세요.
~$ grep '\([0-9]*\)/[tcp\|udp]\1' /etc/services
그러나 결과가 올바르지 않습니다(/t 또는 /u). 그렇다면 그룹을 어떻게 사용하나요?
답변1
정규식 역참조를 참조하고 있습니다.
다음 두 가지 참고 자료를 확인하세요.
https://stackoverflow.com/questions/4609949/what-does-1-in-sed-do
http://www.gnu.org/software/grep/manual/html_node/Back_002dreferences-and-Subexpressions.html
출력을 보면 grep '\([0-9]\)\1' /etc/services
숫자 바로 뒤에 동일한 숫자(역참조 \1)가 오는 행 결과 집합이 표시됩니다.