2010-06-03 16 views
5

मैं curl -I का उपयोग करके grep "स्थान" और फिर sed स्थान टेक्स्ट से बाहर रीडायरेक्ट लिंक प्राप्त करने का प्रयास कर रहा हूं ताकि मुझे यूआरएल के साथ छोड़ा जा सके।grep curl-i हेडर जानकारी

लेकिन यह काम नहीं करता है। यह यूआरएल स्क्रीन करने के लिए आउटपुट और यह

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 पेजर के रूप में इस दिखाता^एम

आप 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 'स्थान:' (पूंजी 'एल' के साथ शुरू होने वाली रेखा में स्थान लौटाता है), यदि आपका संस्करण वास्तव में इसे लोअरकेस 'एल' के साथ रिपोर्ट कर रहा है, तो आपको उसे बदलने की आवश्यकता हो सकती है तदनुसार नियमित अभिव्यक्ति।

+0

आह हाँ awk, मैं हमेशा उस आदेश के बारे में भूल जाते हैं। हाँ यह अजीब बात है कि अन्य सभी पूंजी के साथ शुरू होते हैं लेकिन स्थान नहीं: मैंने [एलएल] ओशन में जोड़ा है: ताकि मेरी स्क्रिप्ट अभी भी एक अलग डिस्ट्रो पर काम करेगी :) धन्यवाद! – Mint

3

"स्थान" http शीर्षलेख पूंजी एल के साथ शुरू होता है, इसे अपने आदेश में बदलने का प्रयास करें।

अद्यतन

ठीक है, मैं दोनों लाइनों को अलग से समाप्त हो गया है और प्रत्येक ठीक चलाता है, को छोड़कर यह कर्ल आदेश से उत्पादन की तरह लग रहा है कि कुछ नियंत्रण वर्ण जो चर में कब्जा किया जा रहा है भी शामिल है। जब इसे बाद में इको कमांड में मुद्रित किया जाता है, तो $ टेस्ट वैरिएबल मुद्रित किया जाता है जिसके बाद कर्सर को लाइन की शुरुआत में सेट करने के लिए कैरिज रिटर्न किया जाता है और फिर ..2 को 1 के शीर्ष पर मुद्रित किया जाता है ..

चेक आउट कम समय में $ परीक्षण चर:

echo 1..$test..2 | less 

कम शो:

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

जहां^एम गाड़ी वापसी चरित्र है।

+0

मेरा नहीं, मेरा "स्थान" है: – Mint

+1

@ user353852: बिलकुल शानदार! 'कम' पर पिपिंग हाइलाइट करता है कि "..2" लाइन की शुरुआत में क्यों है। – Johnsyweb

+0

आह हाँ मैं इसे अब देखता हूं, इसलिए छोटे भिखारी को सभी परेशानी होती है। – Mint