在一个巨大的文件中,我有像
这样的端口号"port": "7733",
"port": "7734",
"port": "7631",
"port": "7833",
"port": "7835",
"port": "7335",
"port": "9834",
我只需要使用sed替换(仅第3个数字)3和5。预期的结果应该是
"port": "7753",
"port": "7754",
"port": "7651",
"port": "7853",
"port": "7855",
"port": "7355",
"port": "9854",
我试过了
sed -E 's/[0-9][0-9]3[0-9]+/[0-9][0-9]5[0-9]/g'
但这会将所有数字替换为[0-9] [0-9] 5 [0-9]。
请告诉我们如何使用sed实现
答案 0 :(得分:0)
sed
允许您将与正则表达式匹配的文本保存为稍后要使用的组。此解决方案可以保存两组:3
之前的数字和之后的数字。因此,替换文本由第一组表示,\1
,数字5
,第二组表示\2
。因此:
$ sed -E 's/([0-9][0-9])3([0-9]+)/\15\2/g' file
"port": "7753",
"port": "7754",
"port": "7651",
"port": "7853",
"port": "7855",
"port": "7355",
"port": "9854",
答案 1 :(得分:0)
如果您的数据包含4个数字端口,然后使用awk
,您只需拆分字段并向其添加20:
$ awk 'BEGIN{FS=OFS="\""}{$4+=20}1' file
"port": "7753",
"port": "7754",
"port": "7651",
"port": "7853",
"port": "7855",
"port": "7355",
"port": "9854",
输出看起来不错后,您可以重定向到另一个文件。或者,如果您使用的是GNU awk v4.1或更高版本,则可以通过执行以下操作进行更改:
awk -i inplace 'BEGIN{FS=OFS="\""}{$4+=20}1' file