Bash CRLF - 文档末尾的新行

Bash CRLF - new lines at the end of document

在Whosebug和大叔Google上看了很多问题,但不知为何还是破解不了。

我有一个由 SSRS 自动导出的 CSV 文件。不幸的是,导出插件很旧,它们在文件末尾放置了两个换行符和回车 returns:

00000c0: 6b7c 3230 2d46 6562 2d31 360d 0a0d 0a k|20-Feb-16....

我尝试了很多 sed 替换,但它似乎只删除了一行。

比如简单的

sed -i '/^\s*$/d'

还尝试将 \s 替换为 [[:space:]](同样有效,但仅在一行中)

之后十六进制转储的最后一行如下所示:

00000c0: 6b7c 3230 2d46 6562 2d31 360d 0a k|20-Feb-16..

我试过类似的东西:

sed -i 's/\x0D\X0A//g' <file> 但是这不会替换最后的两个 0d0a

如有任何帮助,我们将不胜感激

以下命令应该适合您:

sed 's/\x0d//;/^$/d'

我要删除所有回车 return 个字符并删除空行。

试一试,像这样:

echo -e "foo\x0a\x0d\x0a" | sed 's/\x0d//;/^$/d' | xxd
00000000: 666f 6f0a                                foo.

"Forget about the last two lines."

# gnu!
head -n -2 foo.csv > foo.csv.new

"Oh, ed (or ex/vi/vim), kill the last two lines."

ed foo.csv << EOF
$
-1,$d
w foo.csv.new
q
EOF

# ex/vi/vim: change this to vi -c "the whole trunk".

"I love sed. And I love sed."(我没有)

sed -i -e '$d' foo.csv; sed -i -e '$d' foo.csv

"Should I kill this?"

[[ $(tail -n 2 foo.csv) == $'\r\n\r\n' ]]

"Vim, can you test for that yourself?"

# I don't write vimscript.

"PERL?"

# I don't write Perl.