regex - 使用 sed 时缺少空格

标签 regex linux sed sysadmin

所以我结合使用 lsof 和 jq 来转换为 json。原始输出示例:

  [
    "blah",
    "1234",
    "yoda",
    "561u",
    "IPv4",
    "297229000",
    "0t0",
    "TCP",
    "15.60.74.17:1511",
    "(LISTEN)"
  ]
]

将其与 sed 一起使用时:

sed -e "s/(//" -e "s/)//" | sed 's/.*:\([0-9]\+\).*/"\1",/g'

输出结果为:

  [
    "blah",
    "1234",
    "yoda",
    "561u",
    "IPv4",
    "297229000",
    "0t0",
    "TCP",
"1511",
    "LISTEN"
  ]
]

请注意没有为“1511”保留空间不知道我错过了什么,我确定有些愚蠢,有人知道我在这里错过了什么吗?

最佳答案

你可以使用一个寄存器,但是少匹配会更容易:

echo '    "15.60.74.17:1511",' | sed -e "s/(//" -e "s/)//" -e 's/[0-9\.]*:\([0-9]\+\).*/\1",/g'

顺便说一句,您不需要 2 个 sed - 只需一个带有两个 -e 即可。

关于regex - 使用 sed 时缺少空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60440411/

相关文章:

linux - 从 ps -ef | 识别 PID grep 进程名

r - 如果模式是字符串字符,如何找到匹配项?

regex - Codeigniter 路由正则表达式 - 匹配除 'admin' 之外的任何字符串

c# - RegularExpression 属性 - 传入类的属性字段

C 字符串字符串比较总是导致 false

linux - 用反斜杠替换字符串

javascript - 全能表单字段上的正则表达式

python - Linux 上 Python 中的随机数生成器

perl - 使用特定模式 sed/awk/perl 编写正则表达式

regex - 使用 sed 在带引号的字符串末尾添加一些内容