从变量字符串中提取ip地址

mk_*_*_89 4 unix bash

我正在尝试创建一个bash脚本,它将能够在phpmyadmin命令文件中更改"allow from"ip地址(我仍然不确定是否可以这样做)并重新启动apache

我正在尝试从变量中提取IP地址,在搜索网络后我仍然没有任何线索,这是我到目前为止所拥有的...

#bash shell script
#!/bin/bash

clear
echo "Get client IP address"
ip=$(last -i)
echo $ip

exit
echo "restart apache"
/etc/init.d/apache2 reload
Run Code Online (Sandbox Code Playgroud)

我尝试添加以下行没有运气

ip=$(head -n 1 $ip)
Run Code Online (Sandbox Code Playgroud)

如果有人能告诉我如何从变量$ ip中提取IP地址的第一个实例,我将非常感激.

Cyr*_*rus 7

ip=$(last -i | head -n 1 | awk '{print $3}')
Run Code Online (Sandbox Code Playgroud)

更新:

ip=$(last -i | grep -Pom 1 '[0-9.]{7,15}')
Run Code Online (Sandbox Code Playgroud)


kon*_*box 6

你可以用grepread:

read ip < <(last -i | grep -o '[0-9]\+[.][0-9]\+[.][0-9]\+[.][0-9]\+')
read ip < <(last -i | grep -Eo '[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+')
Run Code Online (Sandbox Code Playgroud)
  • \b也许在那里很有帮助.只是不确定它的兼容性.

而另一个:

ip=$(last -i | gawk 'BEGIN { RS = "[ \t\n]"; FS = "." } /^([0-9]+[.]){3}[0-9]+$/ && ! rshift(or(or($1, $2), or($3, $4)), 8) { print ; exit; }')
Run Code Online (Sandbox Code Playgroud)