regex - 使用 sed 时缺少空格
问题描述
所以我将 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'
推荐阅读
- django - 在 django 中,如何在 GET 和 POST 方法之间共享一个对象
- visual-studio - 光标显示为块,没有典型的编辑能力
- flutter - 将 TextFormField 内的 Flutter DropdownButton 作为前缀
- arrays - 如何在保留其他单元格数据的同时将单元格值拆分为多行?
- java - DriverManager 和 com.mysql.jdbc.Driver() 的问题
- sql-server - SQL Server Express & sqlcmd:找不到存储过程
- glsl - 在 glsl 计算着色器中复制组之间的边界值
- javascript - 使用 Internet Explorer 时创建了一个反应应用程序弹出模式中断 chrome、firefox 或 safari 它工作正常任何建议
- python - Unicodedata 适用于终端但不适用于 .py
- javascript - 在此代码中将日期格式化为 dd/MM/yyyy