如何在bash中分割定界字符串以组成dd命令?

问题描述

我想读取一个配置文件,其外观应类似于以下所示:

source/path:blocksize,offset,seek,count
source/path2:blocksize,seek
source/path3:blocksize,offset

其中source/pathsource/path2source/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"