2017-06-15 107 views
1

我想寫一個腳本。我使用xmlrpc的遠程過程調用來獲取URL。例如,我將輸出分配爲一個變量,如url=$(xmlrpc 192.168.1.1 command...)。這是過程調用的輸出,當輸出到文件:提取多行變量中的單引號之間的文本與sed

Result: 

String: 'http://example.url' 

這一切都顯示了與echo $url一行。當我試着使用sed s/^.*'\(.*\)'.*$/\1/ $url提取單引號之間的URL,我得到以下幾點:

sed: can't read Result:: no such file or directory 
sed: can't read String:: no such file or directory 
sed: can't read http://example.url: no such file or directory 

也許多行的問題。我遇到類似的錯誤grep -oP "(?<=').*?(?=')" $url有什麼想法?我只想提取網址。

+1

爲什麼「用sed」?例如,如果這是bash,是不是有沒有使用shell的原生正則表達式支持的原因? –

+0

那是因爲sed和grep都將文件作爲參數,而不是字符串。 – 123

+0

我沒有特別的原因使用sed。我也嘗試過awk和grep。沒想到嘗試本地shell。無論什麼作品。很高興知道,它不會以字符串作爲參數。謝謝。 – user2328273

回答

0
sed -n "s/^.*'\(.*\)'.*$/\1/ p" <<< ${url} 
+0

謝謝,這很好。我並不是真的知道'<<<'。 – user2328273

0

我認爲你應該給本地bash正則表達式和替換一個嘗試。如果你真的想從你的多變量提取的網址:

$ echo "$url" 
Results: 

String: 'http://example.url' 

與SED,那麼你可以使用這樣的事情:

$ url=$(sed -n "s/^.*'\(.*\)'.*$/\1/p" <<< $var) 
$ echo "$url" 
http://example.url 
2

隨着慶典定期expresssions

[[ "$url" =~ \'(http:[^\']*)\' ]] && echo ${BASH_REMATCH[1]} 
http://example.url 
+0

這也工作,但我不得不刪除'http:'部分的工作。可能是因爲URL並不總是以它開頭。我的問題最初是關於sed,所以我會留下其他答案作爲答案(爲後代),但將用於我需要的,因爲這是一個更好的方式來做我想要完成的事情,而不是使用sed。我只是沒有考慮過這種方法。謝謝。 – user2328273

+0

@ user2328273,你可以很容易地調整方法到'[['$ url'=〜'([^ \'] *)']] && echo $ {BASH_REMATCH [1]}' – RomanPerekhrest

+0

是的,這就是我沒有。謝謝。 – user2328273