我在文件中有一个URL字符串(例如http://10.58.206.10:20002/job-cache/job/548
)。从这个字符串我只需要打印IP地址值(即10.58.206.10
)。
此IP地址会经常变化,因此我需要将其视为“http://
之后和:20002
之前的值”。为此,我使用grep
和sed
,如下所示,但我无法获得确切的值。
grep -i "Result URL:" taf.log | sed 's/^.*http://'
答案 0 :(得分:2)
您可以避免grep
使用单个sed
:
sed -E '/Result URL:/s~.*http://([^:]+):.*~\1~' taf.log
答案 1 :(得分:0)
这将完全匹配IP地址:
grep "Result URL" taf.log |egrep -o "([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}"
编辑:这应该为你做。它仅在匹配“结果URL”字符串时打印IP地址。
答案 2 :(得分: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和cut一起为bash提供非常强大的一个衬里。 xargs是顺序命令最强大的。
答案 3 :(得分: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