2017-08-24 70 views
0

我在一個文件中有一個URL字符串(例如http://10.58.206.10:20002/job-cache/job/548)。從這個字符串中,我只需要打印IP地址值(即10.58.206.10)。使用shell命令從URL字符串打印值

這個IP地址會經常變化,所以我需要得到它像「http://之後和:20002之前的價值」。爲此,我使用grepsed作爲如下,但我無法得到確切的價值。

grep -i "Result URL:" taf.log | sed 's/^.*http://' 

回答

2

您可以避免grep使用單一sed

sed -E '/Result URL:/s~.*http://([^:]+):.*~\1~' taf.log 
+0

對不起,它不工作..它是打印總日誌。我們錯過了什麼嗎? – SinghB

+0

我想它應該是'sed -nE'/ Result URL:/s~.*http://([^:] +):。*〜\ 1〜p'taf.log' – hek2mgl

+1

謝謝anubhava!它的工作與-nE選項。真的可以節省很多時間。非常感謝 !!! – SinghB

0

這將完全匹配的IP地址:

grep "Result URL" taf.log |egrep -o "([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}" 

編輯:這應該爲你做它。它僅在「結果URL」字符串匹配時纔打印IP地址。

+0

謝謝雅庫普..它的工作。但它會打印兩次,因爲這個IP會在日誌中獲得兩次。這就是我試圖使用grep cmd從名爲「Result URL」的日誌中獲取行然後使用sed的原因。 – SinghB

0
echo http://10.58.206.10:20002/job-cache/job/548 | cut -d"/" -f3 | cut -d":" -f1 >> taf.log 

它還將與沒有端口號的情況下工作:

echo http://10.58.206.10/job-cache/job/548 | cut -d"/" -f3 | cut -d":" -f1 >> tap.log 

因此,它更普遍意義。使用sed,echo,tr,xargs和切割在一起會給你帶來非常強大的bash內襯。 xargs是順序命令最強大的功能。

0

你能否請嘗試下面的內容,並讓我知道這是否有幫助。

echo "http://10.58.206.10:20002/job-cache/job/548" | awk '{match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]/);print substr($0,RSTART,RLENGTH)}' Input_file 

或者,如果您正在讀取來自Input_file的值,則可以嘗試以下操作。

awk '{match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]/);print substr($0,RSTART,RLENGTH)}' Input_file