2017-08-24 31 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