相关疑难解决方法(0)

替换大文件中包含换行符的字符串

任何人都知道一种基于非行的工具以某种内存高效的方式“二进制”搜索/替换字符串?也看到这个问题

我有一个 +2GB 的文本文件,我想对其进行处理,类似于以下内容:

sed -e 's/>\n/>/g'
Run Code Online (Sandbox Code Playgroud)

这意味着,我想删除在 a 之后出现的所有换行符>,而不是其他任何地方,因此排除tr -d.

这个命令(我从一个类似问题的答案中得到)失败了couldn't re-allocate memory

sed --unbuffered ':a;N;$!ba;s/>\n/>/g'
Run Code Online (Sandbox Code Playgroud)

那么,有没有其他不求助于C的方法呢?我讨厌 perl,但我愿意在这种情况下破例 :-)

我不确定数据中没有出现任何字符,所以\n如果可能的话,我想避免用另一个字符临时替换。

任何好主意,任何人?

sed text-processing newlines

17
推荐指数
2
解决办法
1万
查看次数

一次替换多个字符串

我正在寻找一种方法来用具体的值替换模板文件中的占位符字符串,使用常见的 Unix 工具(bash、sed、awk,也许是 perl)。替换在单次通过中完成很重要,也就是说,已经扫描/替换的内容不得考虑用于另一次替换。例如,这两次尝试都失败了:

echo "AB" | awk '{gsub("A","B");gsub("B","A");print}'
>> AA

echo "AB" | sed 's/A/B/g;s/B/A/g'
>> AA
Run Code Online (Sandbox Code Playgroud)

在这种情况下,正确的结果当然是 BA。

一般来说,该解决方案应该等同于从左到右扫描输入以寻找与给定替换字符串之一的最长匹配,并且对于每个匹配,执行替换并从输入中的那个点继续(没有已经读取的输入也不应该考虑进行匹配的替换)。实际上,细节并不重要,只是替换的结果永远不会被完全或部分地考虑用于另一个替换。

注意我只是在寻找正确的通用解决方案。请不要提出对某些输入(输入文件、搜索和替换对)失败的解决方案,尽管它们看起来不太可能。

bash sed awk string replace

13
推荐指数
1
解决办法
2万
查看次数

标签 统计

sed ×2

awk ×1

bash ×1

newlines ×1

replace ×1

string ×1

text-processing ×1