编写不同的文本处理和文件操作脚本时,通常需要对文件中的行,单词和字符进行迭代,尽管这个问题看起来很简单,但是实现起来却常常出现问题,下面,就让我们来看看怎样实现上述功能。
为了实现上述的功能,我们需要分三个步骤叙述
一.迭代文件中的每一行
我们可以通过用一个 while 循环从标准输入中读取,因此,它在每一次迭代中都会读取一行。
下面的方法可以将stdin 重定向到文件:
首先我们看下文件中的内容是怎样的:
NO Hello Mark Percent
1 Sarath 45 90
2 Alex 49 98
3 Anu 45 90
下面给出实现的脚本:
#!/bin/bash
while read line
do
echo $line
done < data.txt
运行下我们的脚本,结果如图所示:
二.迭代一行中的每一个单词
我们同样可以用while循环得到每一行,之后利用 IFS 获取一行的各个字段
下面给出实现的脚本:
#!/bin/bash
while read line
do
for word in $line
do
echo $word;
done
done < data.txt
运行下我们的脚本,结果如图所示:
三.迭代一个单词中的每一个字符
我们利用一个 for 循环对变量 i 进行迭代,迭代范围从0到字符串的长度。在每次迭代中,我们可以用一个特殊的记法:
${string:start:position:No_of_characters}
意思是:从字符串中提取一个字符
这被称为是子串提取技术,${word:start:position:No_of_characters} 返回变量word所包含的字符串中的一个子串
${#word} 返回变量的长度
下面给出实现的脚本:
#!/bin/bash
while read line
do
for word in $line
do
for(( i=0;i<${#word};i++ ))
do
echo ${word:i:1};
done
done
done < data.txt
运行下我们的脚本,结果如图所示:
说明:由于显示的内容太长,这里的截图显示的只是输出的一部分字符