如何在bash中使用Regex后抓取下一个Word?

时间:2015-12-01 00:51:24

标签: regex bash awk sed grep

我想在IP正则表达式匹配($ 2)后从文本文件中获取Word:

FILENAME.TXT:

IP hostname blah blah blah ...

等等等等。

IP主机名等等等等... 。 。

我想知道每个IP实例的主机名(我用grep regex找到它并将其存储在$ var中)。我想使用找到的主机名设置为$ host并将其打印到带有IP的文本文件中(已经完成)。

我尝试过在线答案的多种方法,但都打印了空白。

谢谢!

2 个答案:

答案 0 :(得分:1)

有关如何最佳地从流中读取的指导,请参阅BashFAQ #1

#!/bin/bash
#      ^^^^ important, not /bin/sh

while read -r -a words; do
    # put the array words into $1, $2, $3, etc.
    set -- "${words[@]}"

    # put $1 -- the first word -- into the variable named "ip"
    ip=$1

    # remove $1, leaving only hostnames in $1, $2, etc
    shift

    echo "IP address $ip has the following hostnames:"
    for hostname; do # by default, a for loop iterates over $@
      echo "- ${hostname}"
    done
done < <(grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' test_amy_hostrun.txt)

答案 1 :(得分:0)

awk救援!

$ awk  '/^([0-9]{1,3}\.){3}[0-9]{1,3}/{print $1, $2}'

将为您提供以匹配的正则表达式开头的行的IP主机名。

如果您的awk不支持正则表达式间隔,则需要添加--re-interval选项。