gpt4 book ai didi

macos - Unix脚本,用于在Mac上删除文件的第一行

转载 作者:行者123 更新时间:2023-12-03 18:39:58 25 4
gpt4 key购买 nike

在Mac上,当我尝试运行时:

sed -i 2d file.csv

Unix script to remove the first line of a CSV file的答案,我得到以下错误:
sed: 1: "file.csv": invalid command code f

如果我想删除 file.csv的前两行怎么办?

最佳答案

在Mac上,BSD sed需要后缀进行备份(但是后缀可以是一个空字符串'')—与GNU sed一样,它不是可选的。因此,您的命令被解释为“使用后缀2d和…oops备份文件,给定的脚本是file.csv,但是f不是sed命令”。

sed -i .bak -e 2d file.csv
这将从CSV文件中删除第一行数据(保留标题行)。
如果您想编写代码使其可以与BSD和GNU sed一起使用,则必须将后缀附加到 -i选项(GNU sed要求将后缀附加到 -i选项;这是它确定是否有可选后缀或后缀的方式。不是):
sed -i.bak -e 2d file.csv
请注意,您不能使用空的后缀,并且不能将命令与BSD sed和GNU sed一起使用。
在任一命令行中都不需要 -e,但是我经常使用它。我也经常用单引号将命令引起来,尽管这里没有必要。
如果要删除前两个数据行,请使用 2,3d作为命令。如果要删除前两行,请使用 1,2d
如果您不想要备份,则可以在 sed命令完成后(最简单)将其删除,也可以使用两阶段或三阶段跳舞:
sed 2d file.csv > file.csv.bak &&
mv file.csv.bak file.csv # Oops; there went the links

sed 2d file.csv > file.csv.bak &&
cp file.csv.bak file.csv
rm -f file.csv.bak
使用这些,如果中断或其他信号终止了脚本,则可能需要添加 trap命令来清理中间 .bak文件。

要引用Apple文档 sed(该文件最初由 Diego在他选择删除的 answer中引用)引用, -i选项采用一个参数,该参数指示用于备份副本的扩展名。

-i extension

Edit files in-place, saving backups with the specified extension. If a zero-length extension is given, no backup will be saved. It is not recommended to give a zero-length extension when in-place editing files, as you risk corruption or partial content in situations where disk space is exhausted, etc.

关于macos - Unix脚本,用于在Mac上删除文件的第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29482817/

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