我有一个带有尾随 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