绕过 Sed 中的字符限制并替换 / 字符?

绕过 Sed 中的字符限制并替换 / 字符?

我正在使用 Windows XP。

我想替换一个长度为 200,000 个字符的单词,CMD 出现问题(输入行太长)。使用 Linux,终端是否存在相同长度的问题?

如果我用许多其他单词替换许多单词,则我无法替换字符,/因为 CMD 会出现输出错误。

有没有解决方案可以解决这个问题?

答案1

关于你关于 Linux 终端命令行的问题。答案是:它可以处理更大的字符串,这在很大程度上取决于你有多少可用 RAM。例如,从命令行,我刚刚运行了printf '%s'一个 20,000,000 字节的字符串;它没有问题。我也运行过它sed.exe(在 Linux葡萄酒环境);这也很好用...无论命令行限制是什么,它还取决于您提供的程序是否可以处理如此大的字符串作为其命令输入的最大大小。

但这是一种不寻常/奇怪的情况,您会想要将如此大的字符串传递给程序,因为您在某个时候会达到最大值。

对于sed如此大的字符串,您可以执行以下两项操作之一:

  1. 将您的数据写入文件并使用:

    sed "s@ab/cd@AB_CD@" my_data_file

  2. 通过管道(|)将命令的输出传输到 sed 的标准输入:

    my_data_app | sed "s@ab/cd@AB_CD@"

注意sed本身可能有一些行长度限制,但是从记忆中,GNU sed 的限制相当高。

/另外,我没有使用默认的,而是使用了@,但您也可以使用任何您喜欢的。

答案2

我在 win7 上使用 sed for windows。我遇到了一个问题,替换字符串太大了。我用它来替换配置文件的部分内容,大约 10,000 个字符后它就会停止工作并给出无法找到指定文件的错误。

我最终不得不将替换分为两个操作。第一个操作将填充 1/2 的数据并以 ###ENDOFSECTION### 结尾,然后另一个替换将用其余数据替换 ###ENDOFSECTION###。不确定这是否只是 Windows 的限制。

相关内容