如何从文件中删除尾随的 CRLF?

如何从文件中删除尾随的 CRLF?

我有一个带有尾随 CRLF(总共 2 个字节)的二进制文件,我想删除它。我该怎么做呢?请注意,我使用的是 busybox,但没有 perl。

答案1

对于典型的 BusyBox 安装,我认为您必须解析 的输出ls才能获取大小。确定大小后,使用 . 提取文件的前 n-2 个字节head

size=$(ls -Lnd -- "$file" | awk 'NR==1 {print $5}')
head -c "$(($size - 2))" <"$file" >"$file.new"

如果您想就地截断文件,请使用dd.

size=$(ls -Lnd -- "$file" | awk 'NR==1 {print $5}')
dd if=/dev/null of="$file" bs="$(($size - 2))" seek=1

答案2

获取文件的大小,减去二。您获得$n(如n=$(wc -c < the-file))并运行

dd bs=1 seek="$n" < /dev/null of=the-file

或者,如果您有truncate支持负偏移量(意味着从文件末尾开始的偏移量):

truncate  -s -2 the-file

或者与ksh93

: 1<>; the-file >#((EOF-2))

(这<>;是标准重定向运算符的一种特殊形式,如果成功,则<>在命令(此处)返回后截断文件,是查找运算符)。:>#((...))

答案3

tr -d '\013' < input > output

相关内容