gpt4 book ai didi

bash - 在同一命令中删除重复行并覆盖文件

转载 作者:行者123 更新时间:2023-11-29 09:17:29 25 4
gpt4 key购买 nike

我正在尝试从文件中删除重复行并更新文件。出于某种原因,我必须将它写入一个新文件并替换它。这是唯一的方法吗?

awk '!seen[$0]++' .gitignore > .gitignore

awk '!seen[$0]++' .gitignore > .gitignore_new && mv .gitignore_new .gitignore

最佳答案

重定向到与输入文件相同的输出文件,如:

awk '!seen[$0]++' .gitignore > .gitignore

将以一个空文件结束。这是因为使用 > 运算符,shell 将在 命令执行之前打开并截断文件。这意味着您将丢失所有数据。

使用较新版本的 GNU awk,您可以使用 -i inplace 选项就地编辑文件:

awk -i inplace '!seen[$0]++' .gitignore

如果您没有最新版本的 GNU awk,则需要创建一个临时文件:

awk '!seen[$0]++' .gitignore > .gitignore.tmp
mv .gitignore.tmp .gitignore

另一种选择是使用来自 moreutilssponge 程序:

awk '!seen[$0]++' .gitignore | sponge .gitignore

sponge 将吸收所有标准输入并在之后打开输出文件。这有效地在写入输入文件之前保持输入文件的完整性。

关于bash - 在同一命令中删除重复行并覆盖文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37768376/

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