2010-06-03 3 views
5

curl -I 다음 "위치"로 및 다음 sed 위치 텍스트를 사용하여 사이트에서 리디렉션 링크를 얻으려고 URL로 남았습니다.어떻게 grep curl -I 헤더 정보

하지만 작동하지 않습니다. 이 화면 URL을 출력하고, 그것을 다음 출력

test=$(curl -I "http://www.redirectURL.com/" 2> /dev/null | grep "location" | sed -E 's/location:[ ]+//g') 
echo "1..$test..2" 

넣어하지 않습니다 무슨 일이야

..2http://www.newURLfromRedirect.com/bla 

를?

+0

'--silent' 또는'-s'는'2>/dev/null'뿐만 아니라 (더 적은 타이핑) 작동합니다. – Phrogz

답변

6

@ user353852에서 지적한대로 캐리지 리턴 문자는 curl에서 출력됩니다. 그 문자는 echo 다음에 임의 문자가 표시 될 때만 나타납니다. less 호출기가 로이 나타^M

당신이 예에서와 같이, "제어 문자"를 제거 sed를 사용할 수 있습니다

% test=$(curl -I "http://www.redirectURL.com/" 2>|/dev/null | awk '/^Location:/ { print $2 }' | sed -e 's/[[:cntrl:]]//') && echo "1..${test}..2" 
1..http://www.redirecturl.com..2 

:

차라리 awk 사용 하나의 프로세스를 저장하여 grep [...] | sed 접근 방식보다

내게있어서 curl은 'Location :'(대문자 'L')로 시작하는 줄에 위치를 반환하며, 버전이 실제로 소문자 'l'로보고하는 경우에는 이에 따라 정규 표현식.

+0

아, 그렇습니다. awk, 나는 항상 그 명령을 잊어 버립니다. 그렇지만 다른 모든 것은 자본으로 시작하지만 위치가 아니라는 것이 이상합니다. i'v가 [ll]에 추가되었습니다 : 그래서 스크립트는 여전히 다른 배포판에서 작동합니다 :) 감사합니다! – Mint

3

"위치"http 헤더가 대문자 L로 시작되면 명령에서이를 대체 해보십시오.

UPDATE

OK, 나는 별도로 두 줄을 실행 한 각은 변수에서 캡처되고 일부 제어 문자를 포함 컬 명령의 출력처럼 보이는 것을 제외하고, 잘 실행됩니다. echo 명령에 나중에 출력 될 때 $ test 변수가 출력되고 줄을 시작으로 커서를 설정 한 후 캐리지 리턴을 입력하면 ..2가 맨 위에 인쇄됩니다.

체크 아웃 이하에서 $ 테스트 변수 :

echo 1..$test..2 | less 

이하 보여준다

^M은 캐리지 리턴 문자
1..http://www.redirectURL.com/^M..2 

.

+0

광산이 아니라 광산이 "위치 :" – Mint

+1

@ user353852 : 절대적으로 뛰어납니다! 'less'로 파이핑하면 "..2"가 줄의 시작 부분에 나타나는 이유가 강조 표시됩니다. – Johnsyweb

+0

아, 네, 이제 그걸 보니 작은 거지가 모든 문제를 일으켰습니다. – Mint