2012-06-01 4 views
2

주어진 URL의 Content-Type (인코딩 없음)을 가져 오는 행을 Bash에 작성하려고합니다.sed가 예상보다 greedier가 일치 함

curl -Is http://www.google.com | sed -nr 's/^Content-Type: ([^;]*)/\1/Ip' 

그러나,이 여전히 text/html; charset=ISO-8859-1뿐 아니라 text/html를 인쇄 : Thisi는 지금까지이 무슨이다. 첫 번째 세미콜론 다음에 ([^;]*) 경기를 중단해서는 안됩니까?

답변

3

당신이 원하는 것은 :

curl -Is http://www.google.com | sed -nr 's/^Content-Type: ([^;]*).*/\1/Ip' 

기본적으로 일치하는 그룹 후에 .*를 추가 있도록 텍스트 뒤에 부품/html로; 출력되지 않습니다.

+2

. *를 사용하는 경우 EOL 앵커가 정말로 필요합니까? –

+0

Nope. 어쨌든 끝날 때까지 일치 할 것입니다. 맞습니다. –

+1

질문을 읽고, 나는 OP와 똑같은 실수를했지만, 이제 나는 그 대답을 이해한다고 생각한다. 패턴이 어느 쪽의 방법과도 일치하지만 답변자의 패턴이 전체 라인과 명시 적으로 일치한다는 것은 사실입니다. 따라서 응답자의 패턴은 명시 적으로 * 전체 행을 대체합니다. OP의 패턴은 후자를 수행하지 않습니다. – thb

관련 문제