bash – 在大型(30G)单行文件上运行sed会返回空输出

2022年 11月 28日 发表评论
腾讯云正在大促:点击直达 阿里云超级红包:点击领取
免费/便宜/高性价比服务器汇总入口(已更新):点击这里了解

咸鱼优惠网

本站教程收集整理的这篇文章主要介绍了bash – 在大型(30G)单行文件上运行sed会返回空输出,本站教程本站觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试使用sed在大型(30G)单行文件上执行简单的文字搜索/替换.

我希望这需要一些时间,但是,当我运行它时,它会在几秒后返回,当我查看生成的文件时,它的长度为零.

>输入文件有30G

$ls -lha Full-Text-Tokenized-Single-Line.txt    -rw-rw-r-- 1 ubuntu ubuntu 30G Jun  9 19:51 Full-Text-Tokenized-Single-Line.txt

>运行命令:

$sed 's/<unk>/ /g' Full-Text-Tokenized-Single-Line.txt > Full-Text-Tokenized-Single-Line-No-unks.txt

>输出文件长度为零!

$ls -lha Full-Text-Tokenized-Single-Line-No-unks.txt   -rw-rw-r-- 1 ubuntu ubuntu 0 Jun  9 19:52 Full-Text-Tokenized-Single-Line-No-unks.txt

我尝试过的事情

>在较短的文件上运行相同的示例:工作
>使用-e修饰符:不起作用
>逃避“<”和“>”:不起作用
>使用简单的模式行(‘s / foo / bar / g’)代替:不起作用:返回零长度文件.

编辑(更多信息)

>返回码为0
> sed版本是(GNU sed)4.2.2

@H_607_27@ @H_607_27@ 对于像sed这样的基于行的编辑器,你不能指望它能够工作,因为它的工作单元(记录)是以换行符结束的行.

如果您的文件中有空格(以防止搜索模式分割),则可以使用一个建议

fold -s file_with_one_long_line |   sed 's/find/replace/g'          |   tr -d 'n' > output

Ps.折叠默认宽度为80,如果您的单词长度超过80,您可以添加-w 1000或至少最长的单词大小以防止单词拆分.

@H_607_27@

本站总结

以上是本站教程为你收集整理的bash – 在大型(30G)单行文件上运行sed会返回空输出全部内容,希望文章能够帮你解决bash – 在大型(30G)单行文件上运行sed会返回空输出所遇到的程序开发问题。

如果觉得本站教程网站内容还不错,欢迎将本站教程推荐给好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。

小咸鱼

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: