coolboywcy 2015-04-25
网上有很多 shell script 读文本文件的例子,但是都没有讲出故事的全部,只说了一半。举个例子,比如从一个 testfile 文件中读取如下格式的文本行:
代码如下:
$ vi testfile ls -a -l /bin | sort ls -a -l /bin | sort | wc ls -a -l | grep sh | wc ls -a -l ls -a -l | sort | wc
代码如下:
$ vi readfile #!/bin/sh testfile=$1 while read -r line do echo $line done < $testfile $ chmod +x readfile $ ./readfile testfile ls -a -l /bin | sort ls -a -l /bin | sort | wc ls -a -l | grep sh | wc ls -a -l ls -a -l | sort | wc
如果想要输出 testfile 文件原有的格式,把每行(作为整体)原封不动的打印出来怎么办?这时需要指定 IFS 变量,告诉 shell 以 "行" 为单位读取。
代码如下:
$ vi readfile #!/bin/sh IFS="" testfile=$1 while read -r line do echo $line done < $testfile $ ./readfile testfile ls -a -l /bin | sort ls -a -l /bin | sort | wc ls -a -l | grep sh | wc ls -a -l ls -a -l | sort | wc
代码如下:
$./mypipe ls -a -l | sort | wc $./mypipe "ls -a -l | sort | wc "
如果不用 IFS 的话,还有一种方法可以得到上面第二种方法的效果:
代码如下:
#!/bin/sh testfile=$1 x=`wc -l $testfile |awk '{print $1}'` i=1 while [ $i -le $x ] do echo "`head -$i $testfile | tail -1`" i=`expr $i + 1` done