首页 > 解决方案 > 如何拆分分隔字符串以在 bash 中组成 dd 命令?

问题描述

我想阅读一个类似于下图所示的配置文件:

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

其中和是一些二进制文件的路径source/path,而 offset、seek、count 和 blocksize 是命令的相应值。 请注意,变量可能会有所不同,例如某些二进制文件可能没有搜索或命令的搜索和计数值。source/path2source/path3dd
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}

如果需要对上述格式进行修改以使其易于解析,那是可以的,因为我用尽了我幼稚的头脑所能想到的所有可能性。

标签: stringbashsplitdd

解决方案


希望这可以帮助:

$ 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,offset,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"

推荐阅读