我需要在linux的shell下,完成在一个文件第20字节的读取4字节,然后将读取的内容复制到第30字节位置。

然后保存修改后的文件。该文件大小为3M左右。请大侠尽量给出详细些的实现方式。测试可行之后,财富送上。... 然后保存修改后的文件。该文件大小为3M左右。
请大侠尽量给出详细些的实现方式。
测试可行之后,财富送上。
展开
 我来答
百度网友5311d79
2011-05-15 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3206万
展开全部
我的实验如下:
首先,建一个41字节的文件file1,查看一下内容。
$ od -tc -Ax file1
000000 a b c d e 1 2 3 4 5 a b c d e 1
000010 2 3 4 5 a b c d e 1 2 3 4 5 a b
000020 c d e 1 2 3 4 5 \n
000029
由于用于实验的是一个单行文本文件,末尾有一个换行符。

先拷贝前30字节到file2中。
$ dd if=./file1 of=./file2 bs=30 count=1
记录了1+0 的读入
记录了1+0 的写出
30字节(30 B)已复制,4.2609e-05 秒,704 kB/秒
$ od -tc -Ax file2
000000 a b c d e 1 2 3 4 5 a b c d e 1
000010 2 3 4 5 a b c d e 1 2 3 4 5
00001e

然后,读取file1中的21~24共4个字节并附加到file2后面。
$ dd if=./file1 of=./file2 conv=notrunc oflag=append ibs=4 skip=5 obs=4 count=1
记录了1+0 的读入
记录了1+0 的写出
4字节(4 B)已复制,6.2934e-05 秒,63.6 kB/秒
$ od -tc -Ax file2
000000 a b c d e 1 2 3 4 5 a b c d e 1
000010 2 3 4 5 a b c d e 1 2 3 4 5 a b
000020 c d
000022

最后,将file1第30个字节之后的内容全部读取出来并附加到file2后面。
$ dd if=./file1 of=./file2 conv=notrunc oflag=append ibs=30 skip=1 obs=30
记录了0+1 的读入
记录了0+1 的写出
11字节(11 B)已复制,6.1464e-05 秒,179 kB/秒
$ od -tc -Ax file2
000000 a b c d e 1 2 3 4 5 a b c d e 1
000010 2 3 4 5 a b c d e 1 2 3 4 5 a b
000020 c d a b c d e 1 2 3 4 5 \n
00002d

这样就可以了。
可以写成一个shell脚本(如下),并在每条dd命令中使用status=noxfer来抑制命令回显,使其静默执行。
#!/bin/bash
dd if=./file1 of=./file2 status=noxfer bs=30 count=1 >/dev/null
dd if=./file1 of=./file2 status=noxfer conv=notrunc oflag=append ibs=4 skip=5 obs=4 count=1 >/dev/null
dd if=./file1 of=./file2 conv=notrunc oflag=append ibs=30 skip=1 obs=30 >/dev/null
exit 0
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式