【问题标题】:How can I extract the content between two brackets?如何提取两个括号之间的内容?
【发布时间】:2013-08-15 15:44:21
【问题描述】:

我的意见:

   1:FAILED      +  *1      0     (8328832,AR,UNDECLARED)

这是我所期望的:

8328832,AR,UNDECLARED

我正在尝试找到一个通用正则表达式,它允许取出两个括号之间的任何内容。

我的尝试是

  grep -o '\[(.*?)\]' test.txt > output.txt

但它不匹配任何东西。

【问题讨论】:

    标签: regex shell unix


    【解决方案1】:

    仍在使用

    grep -oP '\(\K[^\)]+' file
    

    \K 表示使用环顾正则表达式高级功能。更准确地说,这是一个积极的后向断言,你也可以这样做:

    grep -oP '(?<=\()[^\)]+' file
    

    如果您缺少-P 选项,您可以使用 来做到这一点:

    perl -lne '/\(\K[^\)]+/ and print $&' file
    

    使用的另一种更简单的方法

    awk -F'[()]' '{print $2}' file
    

    【讨论】:

    • 我运行这个后得到“grep:括号不平衡”。字母 P 是错字吗? @sputnick
    • 你使用哪个操作系统和哪个 grep ?
    • 是 OS X(UNIX) @sputnick
    • 你能解释一下使用awk的“简单”方法吗?
    • @ tommy.carstensen -F 标志将模式设置为字段分隔符,其中使用的模式是“(”或“)”的正则表达式字符类。它在行中查找任一字符并返回其后的所有内容($2nd 字段),直到下一个字段分隔符,无论是 '(' 还是 ')'。为了使该解决方案按预期工作,它假定只有一个括号组,或者您只想选择第一个组中的文本,并且假定“关闭”括号')'不会在“打开”括号之前'(' 在一行上',否则您的字段将被移动
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多