所以我将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”保留空间,不确定我缺少什么,我确定有些愚蠢,有人知道我在这里缺少什么吗?
这是因为第二个sed命令中的第一个.*
。您可以使用这样的东西来预装空格:
sed -e "s/(//" -e "s/)//" | sed 's/\S*:\([0-9]\+\).*/"\1",/g'
我所做的是...我可以解释,但是如果您自己弄清楚,那会更有趣;)
编辑:好的,我这样说:第二个sed的正则表达式与第一个非空白字符匹配(\S
表示不是空白,它与\s
相反)。因此,您的第二个sed与值之前的空格不匹配。
如果我处于您的位置,则不会将sed用于此任务。使用Python之类的工具取消JSON输入的编组,然后以这种方式使用值将是一种更加自信的方法。就是说,如果必须使用sed进行操作,我将像这样重写第二个sed:
sed -e "s/(//" -e "s/)//" | sed 's/".*:\([0-9]\+\)",$/"\1",/g'