【问题标题】:Regular expression to extract ip between brackets正则表达式提取括号之间的ip
【发布时间】:2018-12-24 15:49:30
【问题描述】:

我的文本格式是

synchronised to server (192.168.204.1) at stratum 5

我想提取括号和它前面的文本之间的ip地址.like

synchronised to server (192.168.204.1)

什么是正则表达式。(使用 awk 或 grep )

【问题讨论】:

  • 对于给定的示例grep -o '.*)' 将起作用..如果这不能解决您的实际用例,请更改您的示例...此外,您应该展示自己尝试解决的问题.. stackoverflow.com/questions/22937618/… 可以帮助您学习正则表达式,但请注意,正则表达式语法/功能因工具而异。有关详细信息,请参阅相应工具的文档
  • 这看起来微不足道,但它确实有效:awk -F'at' ' {print $1} ' Input_File
  • 试试sed 's/\(([^)]*)\).*/\1/' <<< str

标签: regex awk grep


【解决方案1】:

试试这个!

.*\b([0-9]{1,3}\.){3}[0-9]{1,3}\b\)

细分:

.* 选择 IP 地址之前的所有文本

\b 匹配单词字符和非单词字符之间的单词边界。
([0-9]{1,3}\.) 匹配数字 0-9 共 1-3 次(使 1.1.1.1 和 127.0.0.1 成为有效 IP 地址),然后匹配一个句点。
{3} 匹配 3 次令牌
[0-9]{1,3} 匹配数字 0-9 共 1-3 次。
\b 是单词边界
\) 匹配括号

【讨论】:

  • 请补充说明。
  • 完成!另外,如果解决方案有效,为什么 StackOverflow 的答案会受到如此多的反对?
  • 因为重点是答案的质量,而不仅仅是提出解决方案。 :) 花时间写一个答案,添加解释,如果可能的话,添加参考链接,你会得到积极的分数。我建议您浏览一下并检查高票的答案。以我的投票作为动力。 :)
【解决方案2】:

如果您的实际 Input_file 与显示的示例相同,那么以下内容可能会对您有所帮助。

awk 'match($0,/.*\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\)/){print substr($0,RSTART,RLENGTH)}'  Input_file

【讨论】:

    【解决方案3】:

    您会考虑使用sed 来做到这一点吗?这是您可以尝试的命令

    sed -r 's#(.*\([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}\)).*#\1#' Input_File
    

    简要说明,

    1. 正则表达式 .*\([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}\) 将匹配 (IP 地址) 前面的任何内容。注意到内 括号应该被转义。
    2. \1 只会打印外括号所包含的匹配部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 2011-01-25
      • 2017-03-11
      • 1970-01-01
      • 2013-05-04
      相关资源
      最近更新 更多