2010-06-03 11 views
5

Sto cercando di ottenere il collegamento di reindirizzamento da un sito utilizzando curl -I quindi grep in "posizione" e quindi sed dal testo della posizione in modo che rimanga con l'URL.Come grep curl -I informazioni di intestazione

Ma questo non funziona. Produce l'URL per lo screening e non metterlo

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

Che poi uscite:

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

Cosa sta succedendo?

+0

Nota che '--silent' o' -s' funzionano così come '2>/dev/null' (e sono meno digitanti). – Phrogz

risposta

6

Come @ user353852 indica, è presente un carattere di ritorno a capo nell'output di curl che è evidente solo quando si tenta di echo qualsiasi carattere dopo di esso. La less pager mostra questo come ^M

È possibile utilizzare sed per rimuovere "caratteri di controllo", come in questo esempio:

% 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 

Note:

ho usato awk piuttosto rispetto all'approccio grep [...] | sed, salvando un processo.

Per me, curl restituisce la posizione in una riga che inizia con "Posizione:" (con una "L" maiuscola), se la versione lo segnala effettivamente con una "l" minuscola, potrebbe essere necessario modificare la espressione regolare di conseguenza.

+0

Ah sì awk, mi dimentico sempre di quel comando. Sì, è strano che tutti gli altri inizino con una maiuscola ma non con la posizione: sono stati aggiunti in [lL] ocation: in modo che il mio script continui a lavorare su una distro diversa :) Grazie! – Mint

3

l'intestazione http "Location" inizia con una L maiuscola, prova a sostituirla nel comando.

UPDATE

OK, ho eseguire entrambe le linee separatamente e funziona bene, tranne che sembra l'output del comando arricciatura include alcuni caratteri di controllo che viene catturato nella variabile. Quando viene stampato in seguito nel comando echo, la variabile $ test viene stampata seguita dal ritorno a capo per impostare il cursore all'inizio della riga e quindi ..2 viene stampato sopra 1 ..

Check out la variabile $ test in meno:

echo 1..$test..2 | less 

meno spettacoli:

1..http://www.redirectURL.com/^M..2 

dove^M è il carattere di ritorno.

+0

Non mio, il mio è "posizione:" – Mint

+1

@ user353852: assolutamente geniale! Piping to 'less' evidenzia perché" ..2 "è all'inizio della riga. – Johnsyweb

+0

Ah sì, lo vedo ora, quindi questo è il piccolo mendicante che causa tutti i problemi. – Mint

Problemi correlati