用于删除 Mac 上文件第一行的 Unix 脚本
Unix script to delete the first line of a file on a Mac
在我的 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
的前两行怎么办?
sed -i.bak '2,3d' filename.csv
将删除第 1 行和第 2 行(假设您有 headers)
此命令的作用是编辑被引用的文件,同时创建原始文件的备份(因此使用 .bak
)。删除行'2,3d'
会删除原文件的第2、3行
在 Mac 上,BSD sed
需要备份后缀(但后缀可以是空字符串,''
)——它不是可选的使用 GNU sed
。因此,您的命令被解释为“备份后缀为 2d
的文件……糟糕,您提供的脚本是 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
文件。
引用 sed
的 Apple 文档——最初由 Diego in an 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.
在我的 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
的前两行怎么办?
sed -i.bak '2,3d' filename.csv
将删除第 1 行和第 2 行(假设您有 headers)
此命令的作用是编辑被引用的文件,同时创建原始文件的备份(因此使用 .bak
)。删除行'2,3d'
会删除原文件的第2、3行
在 Mac 上,BSD sed
需要备份后缀(但后缀可以是空字符串,''
)——它不是可选的使用 GNU sed
。因此,您的命令被解释为“备份后缀为 2d
的文件……糟糕,您提供的脚本是 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
文件。
引用 sed
的 Apple 文档——最初由 Diego in an answer 引用,他选择删除,-i
选项采用一个参数,指示要使用的扩展用于备份副本。
-i
extensionEdit 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.