나는이 정규식 나오지 WRT의 행동을 이해하려고 노력하고 있어요 :
는 sed -n "s/.*Directory \([^>]*\)>/\1/p" /etc/apache2/sites-enabled/*
이상한 나오지 욕심 정규식 행동
목표는 여기 아파치의 모든 활성화 된 가상 호스트의 웹 루트의 경로를 나열하는 것입니다. /var/www/my_site
그러나 sed -n "s/.*Directory \([^>]*\)/\1/p" <<< "<Directory /var/www/my_site>"
의 결과는 다음과 같습니다 : /var/www/my_site>
나는 차이가 존재하는 것을 알고 예상대로
sed -n "s/.*Directory \([^>]*\)>/\1/p" <<< "<Directory /var/www/my_site>"
입니다 :
이상한 것은이 샘플 명령의 결과가 있다는 것입니다 >
입니다. 문제는 올바른 출력을 얻으려면 >
을 추가해야하는 이유는 무엇입니까? [^>]*
은 모든 것을 일치시킬 수 있어야하며 >
에서 중지해야하므로 괄호 안에 캡처되지 않습니다.
왜 '>'문자가 첫 번째 명령에 포착되었는지, 두 번째 명령에 포착 된 것인지 이해할 수 없습니다. [^>]
이
첫 번째 명령에는 검색어에'> '이 있지만 두 번째 명령에는 검색어가 없습니다. – anubhava
나는 그것을 안다. 질문은 올바른 출력을 얻기 위해'>'를 추가해야하는 이유는 무엇입니까? '[^>] *'는 모든 것을 매치 할 수 있어야하고'> '에서 멈추어야하므로 괄호 안에 캡쳐되지 않습니다. – mak
두 번째 명령에서'>'와 일치하지 않으므로 대체에 포함되지 않고 그대로 유지됩니다. '([^>] * \)를 그 자체로 바꾸고 나머지 줄은 변경되지 않습니다.괄호 안에 무엇을 넣고 싶다면 대괄호 밖의 명령 끝에'. * '를 추가하십시오. –