bash脚本:将输入文件中的字节附加到给定字节偏移位置的预先存在的文件

时间:2018-05-21 19:27:51

标签: bash shell

我想要完成的事情: 我有一个文件,我需要从某个位置复制某些字节 并将它们附加到该文件的给定位置的文件中。

我在想这样的事情:

xxd -s $startOffset -l $numBytes inFile | dd of=fileToModify seek=$location conv=notrunc

我也有这个,但它只适用于附加在文件的开头。

read -p "Enter target file :> " targetFile
read -p "Enter source file to append at the end of target file :> " inputFile
dd if=$inputFile of=$targetFile oflag=append conv=notrunc

提前谢谢!

3 个答案:

答案 0 :(得分:0)

试试这个:

# copy certain bytes from a certain location 
file=$1
certainlocation=$2
certainbytes=$3
# Append them to a file at a given location of that file
givenlocation=$4

dd if=$file of=$file iflag=skip_bytes oflag=seek_bytes,append conv=notrunc skip=$certainlocation seek=$givenlocation count=1 bs=$certainbytes

用法:

> printf "1\n2\n3\n4\n" > /tmp/1; ./1.sh /tmp/1 4 2 2; cat /tmp/1;
1+0 records in
1+0 records out
2 bytes copied, 0.000378992 s, 5.3 kB/s
1
2
3
4
3

答案 1 :(得分:0)

{
  dd if=inFile iflag=count_bytes count="$targetByteLocation" status=none
  cat -- "$fileToAppend"
  dd if=inFile iflag=skip_bytes skip="$targetByteLocation" status=none
} >outFile

答案 2 :(得分:0)

第一个文件的内容

$ cat first
fskasfdklsgdfksdjhgf sadjfsdjfhf
dsfghkasdfg sadfhsdfh hskdjfksdfgkfg
jhfksjdafhksdjfh


ksdjhfsdjfh

sceond文件的内容

$ cat second
jfhasjdhfjskdhf dshfjsdfh3821349832749832]
87348732642364
]yfisdfhshf936494
sdfisdfsdfsa;dlf
9346934623984

shell脚本的内容

$ cat cppaste.sh
dd if=$1 of=$2 bs=1 count=$3 status=noxfer
dd if=$4 of=$2 bs=1 seek=$3 status=noxfer
finsize=$(stat -c%s $2)
dd if=$1 of=$2 bs=1 skip=$3 seek=$finsize oflag=append status=noxfer

使用适当的参数执行shell脚本

$ bash cppaste.sh first  third 10 second
10+0 records in
10+0 records out
107+0 records in
107+0 records out
92+0 records in
92+0 records out

结果文件的内容

$ cat third
fskasfdklsjfhasjdhfjskdhf dshfjsdfh3821349832749832]
87348732642364
]yfisdfhshf936494
sdfisdfsdfsa;dlf
9346934623984
gdfksdjhgf sadjfsdjfhf
dsfghkasdfg sadfhsdfh hskdjfksdfgkfg
jhfksjdafhksdjfh


ksdjhfsdjfh