2012-06-01 2 views
2

Я пытаюсь написать строку в Bash, которая получает Content-Type (без кодировки) заданного URL-адреса. Thisi то, что я до сих пор:sed соответствие greedier, чем ожидалось

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

Однако, это по-прежнему печати text/html; charset=ISO-8859-1 и не только text/html. Должно ли ([^;]*) остановить матч после первой точки с запятой?

ответ

3

Что вы хотите:

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

В основном добавить .* после согласования группы так, чтобы часть после того, как текст/html; не будет выводиться.

+2

Является ли якорь EOL действительно необходимым при использовании. * В конце строки? –

+0

Нет. В любом случае, он будет соответствовать до конца, вы правы. –

+1

Чтение вопроса, я сделал ту же ошибку, что и OP, но теперь я думаю, что я понимаю ответ. Верно, что шаблон соответствует в любом случае, но шаблон ответчика явно соответствует всей строке. Поэтому шаблон ответчика явно * заменяет * всю строку. Шаблон OP не делает последнего. – thb

Смежные вопросы