您的位置:首页 > 运维架构 > Shell

shell脚本分行、分词

2016-02-29 11:55 1991 查看
利用shell脚本可以很容易的对文本文件进行分行、分词。

首先得先了解一个特殊的环境变量IFS(internal field separator);

这个环境变量定义了bash shell用作字符分割符的一系列字符。在默认的情况下,IFS以以下字符作为字段分割符:

空格

制表符

换行符

bash shell遇到以上任一字符,则认为遇到一个新的字符段。有时为了方便处理文件,我们需要一个或者更多个字段分割符,我们可以利用以下语句更改IFS;

IFS=$':'    #一个分割符时,将会以冒号为分割符
IFS=$'\n:;' #多个分割符,将会以回车、冒号、分号作为分割符


为了防止在脚本中定义了新的字段分割符,而在脚本结束后忘记恢复IFS默认值,在写shell脚本时可以这样写:

IFS_OLD=$IFS   #保存默认IFS值
IFS=$'\n'      #自定义的分割符

##<使用新的IFS的脚本代码>##

IFS=$IFS_OLD   #脚本结束后,恢复默认值


具体的代码:

处理文件

vim test_file


this is IFS test file

changing the IFS calue

hello world

1:shell脚本分行代码

vim ifs_test.sh


#!/bin/sh
FILE=test_file #文件名字需要改为要处理的文件名
IFS_OLD=$IFS
IFS=$'\n'
for line in `cat $FILE`
do
echo $line
done
IFS=$IFS_OLD


代码很简单,以回车为字段分割符去处理文件。

2:脚本分词

vim ifs_test.sh


#!/bin/sh
FILE=test_file #文件名字需要改为要处理的文件名
IFS_OLD=$IFS
IFS=$'\n'
for line in `cat $FILE`
do
echo $line
IFS=$' '
for word in `echo $line`
do
echo $word
done

done
IFS=$IFS_OLD


处理结果:

chmod u+x ifs_test.sh
./ifs_test.sh


this is IFS test file

this

is

IFS

test

file

changing the IFS calue

changing

the

IFS

calue

hello world

hello

world

测试实例通过,利用IFS这个环境变量可以很方便的处理文件。比用c语言编程处理文件放便多了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息