Bash 使用sed从csv文件中删除行,并保存文件而不删除行

Bash 使用sed从csv文件中删除行,并保存文件而不删除行,bash,sed,Bash,Sed,我有一个csv文件,我想使用unix sed命令从中删除第二行 csv文件如下所示 a b c d 所以它变成了newfile.csv a c d 根据我对解决方案的搜索,最简单的方法似乎是使用以下sed命令 sed“2d”file.csv>newfile.csv a c d 然而,newfile.csv包含删除的行 d ,不是预期的 a c d 我在macOS Mojave上使用iTerm2在这些情况下,awk也很有用: $ awk 'NR != 2' file.csv a c d

我有一个csv文件,我想使用unix sed命令从中删除第二行

csv文件如下所示

a
b
c
d
所以它变成了newfile.csv

a
c
d
根据我对解决方案的搜索,最简单的方法似乎是使用以下sed命令

sed“2d”file.csv>newfile.csv

a
c
d
然而,newfile.csv包含删除的行

d
,不是预期的

a
c
d

我在macOS Mojave上使用iTerm2在这些情况下,awk也很有用:

$ awk 'NR != 2' file.csv
a
c
d
除了数字2外,awk打印每一行

如果更容易理解:

$ cat file.csv | awk 'NR != 2'
a
c
d

可能是文件格式错误,请尝试以下操作:

dos2unix file.csv
然后是其中一个

sed '2d' file.csv
awk 'NR!=2' file.csv

是否可能file.csv有DOS行结尾CRLF?执行cat-e file.csv并确保在$s之前没有看到任何^M字符。您是对的。有这样的字符dos2unix file.csv&&sed“2d”file.csv>newfile.csvI使用了dos2unix,但没有删除它。我会设法用手把它们取下来。实际上,该文件是mac csv格式的,这导致了问题。通过使用纯csv保存它,问题得以解决,代码得以运行。谢谢您可以使用sed删除这些字符,但这有点棘手。问题依然存在。这段代码只是打印删除的行,就像原始sed命令上面的行一样,应该可以正常工作,几乎可以肯定文件中隐藏了一些意外的控制字符。cat-e file.csv为您返回了什么?