【问题标题】:Find Everything between 2 strings -- Sed查找 2 个字符串之间的所有内容 - Sed
【发布时间】:2021-07-13 08:38:36
【问题描述】:

我的文件包含以下格式的数据。

{"default":true,"groupADG":["ABC","XYZ:mno"],"groupAPR":true}
{"default":true,"groupADG":["PQR"],"groupAPR":true} 

我正在尝试将输出作为

"ABC","XYZ:mno"
"PQR"

我尝试使用 sed 执行此操作,但在某处我出错了。

 sed -e 's/groupADG":[\(.*\)],"groupAPR"/\1/    file.txt

问候。

注意:如果有人对该问题的评价是否定的,我也会要求给出相同的理由。因为我试图自己修复它,因为我无法做到,所以我把它贴在这里。我也举了我的试验例子。

【问题讨论】:

  • 如果您只想要方括号中的内容,也许sed -n 's/.*\([[].*[]]\).*/\1/p' file.txt ?
  • 太好了.. 非常感谢.. 你能把它作为答案发布,以便我接受它。
  • 没问题 - 乐于助人

标签: shell awk sed grep


【解决方案1】:

这是一种可能的解决方案:

sed -n 's/.*\([[].*[]]\).*/\1/p' file.txt

要排除括号:

sed -n 's/.*\([[]\)\(.*\)\([]]\).*/\2/p'

此外,这也可以使用 AWK:

awk -F'[][]' '{print $2}' file.txt

请注意极端情况(例如,如果同一行中有多个带方括号的字段,您可能需要不同的策略)

【讨论】:

    【解决方案2】:

    对于您展示的示例,以下内容也可能对您有所帮助。

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

    或者在 OP 的尝试中也尝试使用 /"groupADG"

    awk 'match($0,/"groupADG":\[[^]]*/){print substr($0,RSTART+12,RLENGTH-12)}' Input_file
    

    【讨论】:

      【解决方案3】:

      awk 设置为FS[][] 和条件/groupADG/

      awk -F'[][]' '/groupADG/ {print $2}' file
      "ABC","XYZ:mno"
      "PQR"
      

      【讨论】:

        猜你喜欢
        • 2020-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-03
        • 2021-05-07
        • 2013-07-26
        • 2021-12-17
        • 1970-01-01
        相关资源
        最近更新 更多