红联Linux门户
Linux帮助

Unix/Linux Shell 逐行扫描文件

发布时间:2008-08-27 10:42:38来源:红联作者:Austria
最优的方案

#!/bin/sh

while read LINE

do

echo $LINE

done < $1

不过这种更加常用

#!/bin/sh

for LINE in $(cat $1)

do

echo $LINE

done

两者的差别在数据的吞吐量,至少教材是这样讲的。

如果想搞明白上面的话,至少要明白管道和重定向的差别。

不过“列出文件的每一行文本内容,再循环遍历上述列表结果”比“循环遍历指定文件”要多干一些事情

至于其他大部分文件扫描方法与上述两种方法类似,比如

#!/bin/sh

cat $1 | while read LINE

do

echo $LINE

done

或者

#!/bin/sh

while line LINE

do

echo $LINE

done

不过,事实上还有一种文件遍历方法

为Unix-like platform管理员熟悉,却很少被使用

比如/usr/bin/e.t.c.sh > /dev/null 2>&1

2>&1翻译过来就是将stderr的输出重定向到stdout

这就是所谓的文件描述符,你可以理解为C语言中的文件指针,事实上也大同小异

exec 3<&0

exec 0<$1

while read LINE

do

echo $LINE

done

exec 0<&3

这段代码说明了它没能普及的原因,不过文件描述符的意义是巨大的

毕竟Unix-like platform是用文件来描述组织一切的
文章评论

共有 2 条评论

  1. wangyu 于 2008-08-27 12:08:53发表:

    高见

  2. lcw0428 于 2008-08-27 11:09:45发表:

    不错,学习了。谢谢.