Shell分割迭代字符串

问题:

IN=”www:wangliang:hello”以冒号分隔,读取分割的内容www,wangliang和hello。

解答:

如果是是一空格(空白)为分隔符,下面是一种解决方案:

  sentence="This is a sentence."
  for word in $sentence; do
        echo $word
  done

如果是要求直接读取,不迭代,下面是一种解决方案:

 line=www:wangliang:hello 
 read p1 p2 p3 <<<line) 
 echo p1, p2, p3

高级用法

test_result.txt

/share/xvs/results/s2017-12-15-061613/performance/up_linpack_vnic_64_g32e/rcp-replay-log/43380replay.log

Total Test: 13
Passed Tests: 0
Failed Tests List: 1,2,3,4,5,6,7,8,9,10,11,12,13
expected_end_fail and segment_error: 12
segment_error: 1

脚本内容:

failed_list=`grep "Failed Tests List" $1《这里是文件名》 | sed "s/Failed Tests List: //"`

while IFS=',' read -ra ADDR ;do
    for i in "${ADDR[@]}"; do
         echo $i
    done
done <<< "$failed_list"

“$failed_list”表示1,2,3,4,5,6,7,8,9,10,11,12,13

.

输出结果:

[root@ccd-nfs tem]# ./1.sh test_result.txt
1
2
3
4
5
6
7
8
9
10
11
12
13

如何将一个文件夹下面的所有以指定后缀文件的名字提取指定位置内容出来

  cd 目录   //进入目录下,对此目录进行操作
  txt_file=` find -name '*.txt'`
  for i in $txt_file ; do
      i=${i:2:4}  //取名字的第二个字符开始【0为开始】,取出4个字符
      echo $i
  done

如何将一个文件夹下面的所有以指定后缀文件的名字提取数字出来

  cd 目录   //进入目录下,对此目录进行操作
  txt_file=` find -name '*.txt'`
  for i in $txt_file ; do
  i=`echo "$i" | tr -cd "[0-9]"`
      echo $i
  done