【问题标题】:bash script - sed to return ip addressbash 脚本 - sed 返回 IP 地址
【发布时间】:2013-04-12 21:46:00
【问题描述】:

我正在开发一个 bash 脚本,我正在尝试从打开的网络接口获取 IPv4 地址,在此操作中我使用 ip addrsed,但出了点问题,因为我无法从 sed 获取 IP。

所以,脚本有时会这样:

ip addr show dev eth0 | grep "inet "

这应该返回:

inet 192.168.1.3/24 brd 192.168.1.255 scope global eth0

对于 sed,我想要这个:

192.168.1.3/24

我尝试了一些正则表达式,但它只给出错误或空行!我怎样才能做到这一点?

【问题讨论】:

  • | awk '{print $2}'
  • 我会将它传送到另一个 grep -o [0-9.]\+/[0-9]\+ (抱歉,我会测试它,但我现在已启动到 Windows。)
  • @Petesh 效果很好!但它不是 sed
  • @PauloOliveira 要求使用 sed 在我看来有点奇怪……几乎就像是家庭作业
  • @Petesh 你是第一个回答的,但你没有回答而是发表评论,所以我不能“接受”你的建议:(

标签: regex linux bash sed


【解决方案1】:

试试这个

ip addr show dev eth0 | sed -nr 's/.*inet ([^ ]+).*/\1/p'

编辑:按要求提供解释性词语。

-n in sed suppressed automatic printing of input line
-r turns on extended regular expressions




s/.*inet ([^ ]+).*/\1/p

搜索后面跟着inet和空格的任何东西,记住在那个空格之后不是空格的所有东西[即括号],然后是任何东西,然后用记住的东西[\1](IP地址)替换所有东西,然后打印该行 (p)。

【讨论】:

  • 一次性移除遮罩:ip -4 addr show eno1 | sed -nr 's|.*inet ([^ ]+)/.*|\1|p'
【解决方案2】:

我知道您要求使用 sed,所以这里有一个使用 GNU sed 版本 4.2.1 的答案。它非常具体,并且非常适合您的需求。根据您的 ip addr show 命令,我假设这是一个 Linux。

ip addr show dev eth0 \
  | sed -n '/^\s\+inet\s\+/s/^\s\+inet\s\+\(.*\)\s\+brd\s.*$/\1/p'`

使用 awk 的更简单方法:

ip addr show dev eth0 | awk '$1=="inet" {print $2}'

【讨论】:

  • 这也像awk 解决方案。在 OS X 上为我工作:ifconfig vnic0 | grep inet | awk '$1=="inet" {print $2}'
【解决方案3】:

你可以这样使用:

sed -e 's/^[^ ]* //' -e 's/ .*//'

【讨论】:

    【解决方案4】:

    使用 grep 直接找出你的答案。

    ip addr show dev eth0 | grep -P '\d+\.\d+\.\d+.\d+\/\d+' -o
    

    【讨论】:

      【解决方案5】:

      嗯,sed 和 awk 的答案都很好。为了只获取没有子网掩码的 IP,您可以像这样继续进行:

      ip addr show dev eth0 | sed -nr 's/.*inet ([^ ]+).*/\1/p' **| cut -f1 -d'/'**
      

      ip addr show dev eth0 | awk '$1=="inet" {print $2}' **| cut -f1 -d'/'**
      

      更好:

      ip route get 255.255.255.255 | grep -Po '(?<=src )(\d{1,3}.){4}'
      

      这应该只输出 IP 地址。

      【讨论】:

        猜你喜欢
        • 2012-10-15
        • 1970-01-01
        • 2014-02-15
        • 1970-01-01
        • 2014-07-09
        • 1970-01-01
        • 2011-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多