我获得了<an arbitrary number of words> <a list of ip addresses comma separated> <timestamp>
形式的输入。
我试图获得ip_list=$(echo $i | sed 's/\([0-9\.,]\)+/\1/')
,其中$i
是前面描述的表单中的一行,但由于某种原因,它匹配整行。
IP列表中间没有空格,只有逗号。
我想获取ip列表(作为块)和两个bash变量中的时间戳。
示例输入
asdf asaskf a aghjjsdf 127.0.0.1,10.0.1.1,8.8.8.8,124.125.163.124 2013-11-22 08:38:12
输出
ip_variable="127.0.0.1,10.0.1.1,8.8.8.8,124.125.163.124"
date_variable="2013-11-22 08:38:12"
答案 0 :(得分:3)
使用bash(默认IFS下)
read -a arr <<<'asdf asaskf a aghjjsdf 127.0.0.1,10.0.1.1,8.8.8.8,124.125.163.124 2013-11-22 08:38:12'
ip_variable="${arr[-3]}"
echo $ip_variable
127.0.0.1,10.0.1.1,8.8.8.8,124.125.163.124
date_variable="${arr[*]:(-2)}"
echo $date_variable
2013-11-22 08:38:12
答案 1 :(得分:0)
echo "${i}" | sed 's/^.*[[:blank:]]\(\(\([012][0-9]\{1,2\}.\)\{3\}[012][0-9]\{1,2\}[.[:blank:]]\)\{1,\}\)[[:blank:]]*\(.*\)$/\1 \4/' | read ip_variable date_variable
如果ip仅由,
分开,则失败
答案 2 :(得分:0)
使用grep -P (PCRE)
:
> s='asdf asaskf a aghjjsdf 127.0.0.1,10.0.1.1,8.8.8.8,124.125.163.124 2013-11-22 08:38:12'
> arr=( $(echo "$s"| grep -oP '(\d+\.){3}\d') )
> set | grep arr
arr=([0]="127.0.0.1" [1]="10.0.1.1" [2]="8.8.8.8" [3]="124.125.163.1")
> ts=$(echo "$s"| grep -oP '\d{4}-\d{1,2}-\d{1,2} .*')
> echo "$ts"
2013-11-22 08:38:12