如何使用 cat 将 bash 中的大文件小写?

How to use cat to lowercase large files in bash?

我正在使用以下命令将文本文件中的所有字符小写。

CORPUSLOWER=$(cat foobar.txt | tr '[:upper:]' '[:lower:]')
echo $CORPUSLOWER > foobar.txt

然而,问题是 foobar.txt 大约有 20gig,它只替换了 foobar.txt 文件的一小部分。

我的问题:如何使用 bash 将大文件转换为小写?

应该可以

tr '[:upper:]' '[:lower:]' < foobar.txt | dd of=foobar.txt conv=notrunc

或者(这可能更干净),使用临时文件

假设您有来自 moreutils 的 sponge,您可以:

tr '[:upper:]' '[:lower:]' < foobar.txt | sponge foobar.txt

sponge "soaks up" 所有内容,只有在看到文件末尾时才打开文件。