shell : 遍历文本每一行(分隔符)

正文

【参考文章】:【Shell脚本】逐行处理文本文件
【参考文章】:Shell中的IFS解惑

1. read

这种方式处理时,如果在循环内操作全局变量,超过循环作用域后,对全局变量的操作就会失效。
比如把每一行文本添加到一个全局数组,在循环内数组添加的元素是正常的,在循环外数组的元素会恢复到循环之前的状态;

cat data.dat | while read line
do
    echo "File:${line}"
done

这种方式处理时,如果在循环过程中执行某些命令,如 fab 命令,执行完命令后会直接跳出循环

while read line
do
    echo "File:${line}"
done < data.dat

2. for var in file

2.1 IFS

这种方式处理时,var 取值由IFS(内部域分隔符)决定,默认为 space,tab,newline来拆解读入的变量。

#!/bin/bash
IFS_old=$IFS      #将原IFS值保存,以便用完后恢复
IFS=$’\n’        #更改IFS值为$’\n’ ,注意,以回车做为分隔符,IFS必须为:$’\n’
    do  something
IFS=$IFS_old      #恢复原IFS值

2.2 for var in file

这种方式遍历文本不会出现上述问题,推荐使用

for line in $(cat data.dat)
do
    echo "File:${line}"
done
 
for line in `cat data.dat`
do
    echo "File:${line}"
done

3. awk

处理文本时的逻辑比较复杂时一般用上述方式,如果只是简单的截取打印,则可以使用 awk 命令

版权声明:
作者:WaterBear
链接:https://l-t.top/2235.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录