gpt4 book ai didi

unix - Sed 用大文件替换第一次出现的地方

转载 作者:行者123 更新时间:2023-12-05 08:34:15 25 4
gpt4 key购买 nike

我有大约 50 个大文本文件 (~4GB),我只需要替换这些文件前 100 行中的一个字符串。事实上,我需要的是一个 unix 命令行,用于查找第一个匹配项,将其替换到位并中断。

我尝试过使用 sed,但我仍在努力获得令人满意的结果。

最佳答案

您可以使用 sed 编辑最多第一个匹配项:

sed -e '1,/pattern/{s/pattern/replace/;}'

在第 1 行到第 N-1 行(第 N 行包含模式),替换什么都不做;在第 N 行,它完成了真正的工作。此后,您不再位于 1,/pattern/ 行范围内,因此没有进一步的转换。

请注意,如果第 1 行与模式匹配,这将不起作用;然后它在第 1 行和与模式匹配的下一行中进行更改。至少使用 GNU sed,您可以将 1 更改为 0 并且可以正常工作。

printf "%s\n" pattern pattern pattern pattern |
sed -e '0,/pattern/{s/pattern/replace/;}'

但是,描述说“在前 100 行中”,而第 1 行在前 100 行中,当它出现在第 1 行时,这不是您通常描述它的方式。

您可以添加一个 -i 选项来在测试后覆盖原始文件。请注意:并非所有版本的 sed 都支持 -i 并且在 Mac OS X 上,备份后缀是强制性的 -i.bak(但可以是空:使用 -i '')。相比之下,GNU sed 有一个可选的后缀,它必须附加到 -i 选项。因此,-i.bak 适用于 GNU 和 Mac (BSD) sed-i 选项的其他用途特定于您正在使用的 sed 变体。

关于unix - Sed 用大文件替换第一次出现的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30871868/

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