我有一些數據,看起來像這樣 "thumbnailUrl": "http://placehold.it/150/adf4e1"
如何分離鏈接以獲取shell中的URL結尾?
我想知道我怎麼能得到URL後沿部分,我想輸出是 adf4e1
我試圖啓動時到grep以/結尾「,但我只是shell腳本初學者,需要一些幫助。
我有一些數據,看起來像這樣 "thumbnailUrl": "http://placehold.it/150/adf4e1"
如何分離鏈接以獲取shell中的URL結尾?
我想知道我怎麼能得到URL後沿部分,我想輸出是 adf4e1
我試圖啓動時到grep以/結尾「,但我只是shell腳本初學者,需要一些幫助。
你可以在linux中使用'cut'命令來做到這一點,使用'/'剪切並保留最後一次剪切。它,它的樂趣!
謝謝我使用它得到它的工作! – CuriousDog
如何使用'cut'來獲取最後一個參數? – galfisher
@galfisher幾個選項http://stackoverflow.com/questions/22727107/how-to-find-the-last-field-using-cut-linux – dganesh2002
我想出了一個快速和骯髒的解決方案,用grep(用Perl的正則表達式)和切:
$ cat file
"thumbnailUrl": "http://placehold.it/150/adf4e1"
"anotherUrl": "http://stackoverflow.com/questions/3979680"
"thumbnailUrl": "http://facebook.com/12f"
"randortag": "http://google.com/this/is/how/we/roll/3fk19as1"
$ cat file | grep -o '/\w*"$' | cut -d'/' -f2- | cut -d'"' -f1
adf4e1
3979680
12f
3fk19as1
使用'cat file | awk -F /'{print $ NF}'' – dganesh2002
'awk'是一種不同的解決方案。 – galfisher
@ dganesh2002爲什麼要用'貓'?並在末尾留下''' – Sundeep
我們可以有許多的小cut
S,或只是一重擊殺死這個AWK:
awk -F'[/"]' '{ print $(NF-1); }'
測試:
$ echo '"thumbnailUrl": "http://placehold.it/150/adf4e1"' \
| awk -F'[/"]' '{ print $(NF-1); }'
adf4e1
過濾thorugh Awk使用雙引號和斜線作爲字段分隔符。這意味着尾部../adf4e1"
被分隔爲{..}</>{adf4e1}<">{}
,其中大括號表示字段和尖括號分隔符。 Awk變量NF
給出了基於1的字段數,因此$NF
是最後一個字段。這不是我們想要的,因爲它是空白的;我們想要$(NF-1)
:倒數第二個字段。
「Golfed」版本:
awk -F[/\"] '$0=$(NF-1)'
如果原始字符串是從一個較大的JSON對象的到來,使用類似jq
提取所需的值。
例如:
$ jq -n '{thumbnail: "http://placehold.it/150/adf4e1"}' |
> jq -r '.thumbnail|split("/")[-1]'
adf4e1
(第一個命令只是產生表示數據的原始源的有效的JSON對象;第二命令分析它並提取所需的值的split
功能拆分網址。一個數組,從中你只關心最後一個元素。)
您可以在bash中使用字符串替換和子去除,如果你包裝你的字符串中的單引號,並將其分配給一個變量也這樣做純粹。
#!/bin/bash
string='"thumbnailUrl": "http://placehold.it/150/adf4e1"'
string="${string//\"}"
echo "${string##*/}"
adf4e1 #output
在第二個命令中不需要使用'echo',只需使用'string =「$ {string // \」}「' – Sundeep
謝謝你指出這一點,我已經更新了答案。 –
也許更重要的是,你是如何得到這個字符串的第一個地方?它看起來像一個JSON片段;像'jq'這樣的工具可能更適合從原始數據中直接獲取所需的值。 – chepner