问题描述
source/path:blocksize,offset,seek,count
source/path2:blocksize,seek
source/path3:blocksize,offset
其中source/path
,source/path2
和source/path3
是一些二进制文件的路径,而偏移量,查找,计数和块大小分别是dd
命令的值。
请注意,变量可能会有所不同,例如某些二进制文件可能没有搜索或dd
命令的搜索值和计数值。
我应该如何分割以上几行以编写这样的dd
命令dd if=${source/path} bs=${blocksize} seek=${seek} count=${count}
dd if=${source/path} bs=${blocksize} seek=${seek}
dd if=${source/path} bs=${blocksize}
?
如果需要以上述格式进行修改以使其易于解析,这是可以的,因为我已经用尽了所有天真的想法可能想到的可能性。
解决方法
希望这会有所帮助:
$ cat <<EOF | while read line; do arr=($(sed 's/[,:]/ /g' <<< $line)); echo "source:${arr[0]} block:${arr[1]} offset:${arr[2]} seek:${arr[3]} count:${arr[4]}"; done
source/path:blocksize,offset,seek,count
source/path2:blocksize,seek
source/path3:blocksize,offset
EOF
source:source/path block:blocksize offset:offset seek:seek count:count
source:source/path2 block:blocksize offset:offset seek:seek count:
source:source/path3 block:blocksize offset:offset seek: count:
总体思路:
#!/usr/bin/env bash
your_command | while read line; do
arr=($(sed 's/[,:]/ /g' <<< $line));
echo "source:${arr[0]} block:${arr[1]} offset:${arr[2]} seek:${arr[3]} count:${arr[4]}"
# Do whatever processing & validation you want here
# access from array : ${arr[0]}....${arr[n]}
#
done
如果您有文件,则:
#!/usr/bin/env bash
while read line; do
arr=($(sed 's/[,:]/ /g' <<< $line));
echo "source:${arr[0]} block:${arr[1]} offset:${arr[2]} seek:${arr[3]} count:${arr[4]}"
# Do whatever processing & validation you want here
# access from array : ${arr[0]}....${arr[n]}
#
done < "path/to/your-file"