gpt4 book ai didi

regex - sed:在 4GB 单行文件上搜索和替换

转载 作者:行者123 更新时间:2023-12-04 18:36:46 25 4
gpt4 key购买 nike

操作系统:14.04
sed:4.2.4

我有多个大文件(2-4gb),我想对其执行一些简单的操作。整个文件在一行中,这让我想知道如何对其执行 sed 操作。

我想对每个文件做三件事:

1) 删除所有[人物

2) 删除所有]人物

3) 替换所有出现的},{}{ .

到目前为止,我已经尝试过 sed -e 's/},{/}{/g' file.json > file_new.json有和没有 g选项,没有任何运气。我也试过sed -e 's/\[//g' file.json > file_new.json没有任何运气。我只得到一个重复的文件。

有任何想法吗?

最佳答案

使用 gnu awk:

awk 'BEGIN{FS="},{";OFS="}{";RS="[][]";ORS=""}$1=$1' file

使用 perl 可能更快(必须测试):
perl -0135 -pe 's/},{/}{/g;y/][//d' file

其中 135 代表字符 ]八进制。 -0 选项定义记录分隔符(而不是逐行读取,文件按部分读取,直到每个 ] )

这两个脚本的目标是避免将整个文件加载到内存中。

要将结果存储在文件中:

您可以重定向输出。
awk 'BEGIN{FS="},{";OFS="}{";RS="[][]";ORS=""}$1=$1' file > result

或者
perl -0135 -pe 's/},{/}{/g;y/][//d' file > result

您可以使用命令行选项:
awk -i inplace -v INPLACE_SUFFIX=.bak 'BEGIN{FS="},{";OFS="}{";RS="[][]";ORS=""}$1=$1' file

或者
perl -0135 -pi'*.bak' -e 's/},{/}{/g;y/][//d' file

(这两个命令会创建原始文件的备份,添加扩展名 .bak,如果要更改源文件,请删除 gawk 的 -v INPLACE_SUFFIX=.bak 和 perl 的 '*.bak'。)

关于regex - sed:在 4GB 单行文件上搜索和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35847971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com