shell字符串处理

linux shell 在作为linux系统的shell程序参与“用户内核交互”的过程中逐渐发展出了前大的文本处理能力。
流处理能力:

shell的大多数字符处理应用其实指的是流处理应用,gnu在对sed介绍时的题目是:sed,a stream editor。
流的概念用shell写脚本的人都会很熟悉,管道符,cut,split,awk,sed等等的处理程序的处理对象是流对象,
而非字符串。这也是linux shell在字符串处理方面和其它脚本语言的较大差别。
仔细看过win cmd和linux bash 脚本的人都会上注意到脚本中有很多echo语句,echo一个很重要的作用是把
脚本中的变量转换成流对象,这样上述工具才可以起作用。

下面就分两类对shell字符处理做下总结:
(测试环境cygwin,gnu bash 4.1.10)

1,流的方式。
这一类的处理模式是:
echo $var|whaterver ur stream editor command
首先把你要处理的变量echo一下变成一个流对象,然后用管道符传递它给后续的处理函数,这些函数以sed和
awk较常见。先说awk,awk的命令形式是:
awk -'ur delimitor' '{ur command for the awk output}'
-F指定域分隔符,awk以指定的分隔符为界,分隔输入流,将分割结果存储在 $1,$2,$3等shell系统变量中.
例:
= "ur_apple"
echo $a 
| awk -F'_' '{print $1}' #以下划线分隔ur_apple
将输出
ur

再来sed。sed来源于stream editor。他确实是一个stream editor,而且非常强大,这里只做简单介绍。
sed命令形式:
sed OPTIONS [SCRIPT] [INPUTFILE]
options 一般设为 -e,及脚本执行,区别于脚本文件执行。如
echo $a|sed --'p'
-n选项指定pattern空间的内容不输出到屏幕,关于sed如何工作请参看http://ss64.com/bash/sed.html
其实sed更多的用法适合正则表达相结合。

下面说下非流方式的字符串处理,这是一种命令替换方式。
= "ur_apple"
echo ${a
%%_apple}
这种方式的形式是:
${var%%}
${var%}
${var##}
${var#}
百分号形式去尾,井号形式去头,另有最长匹配和最短匹配的区别。如
b="ur_appleur_apple"
echo ${b
%_a*ple}
echo ${b
%%_a*ple}
echo ${b#u*r}
echo ${b##u*r}
输出
ur_appleur
ur
_appleur_apple
_apple

posted on 2012-01-13 18:15 ewre 阅读(1267) 评论(0)  编辑 收藏 引用 所属分类: linux shell


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2011年12月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

留言簿(2)

文章分类

文章档案

最新评论

阅读排行榜