首页 > 代码库 > shell正则表达二

shell正则表达二

  shell正则表达 二部分

技术分享

一、printf命令:

1. 格式化输出。(print  format)

2. 命令格式:

printf‘打印格式‘实际内容

技术分享

1. 打印格式:

1) \a(警告声音输出)

技术分享

1) \b(退格键)

技术分享

1) \n(输出新的一行)


技术分享

1) \r(帧处于行的开始,即enter键)

技术分享

\t(水平的table键)

技术分享

1) \v(垂直的table键)

技术分享

1) \xNN(x为ASCII码十六进制表示;NN为俩位数数字;可转换数字成为字符)

技术分享

1) %ns(n为数字;s代表string,即多少个字符)

技术分享

1) %ni(n为数字;i代表integer,即多少整数字符)

技术分享

1) %N.nf(n、N为数字;f代表floating浮点,小数字数即小数点)

技术分享

1. 例子:

1) 以整数形式输出23并换行,以字符串形式输出hello并换行

技术分享

2位整数形式输出23并换行,以7位字符串形式输出hello

技术分享

案例文本

技术分享

输出结果没有对齐

技术分享

如上,可设置字段格式使之对齐(字符串长度、整数及小数点长度)


二、awk命令:

三、awk 则比较倾向于一行当中分成数个字段来处理。

.awk语言的最基本功能是在文件或字符串中基于指定规则来分解抽取信息,也可以基于指定的规则来输出数据。

1) 命令行方式

awk   [-F  field-separator]  ‘commands‘  input-files

[-F  field-separator],域分隔符,默认为空格或tab;

commands为awk命令;input-files为待处理文件。

Linux系统使用环境变量IFS存储分隔符;

技术分享

查看默认分隔符


技术分享

oldIFS=$IFS(把环境变量IFS存到oldIFS)


IFS=","(定义分隔符为,)


技术分享

之后把环境变量返回原值(空格/tab)。

1) shell脚本方式

技术分享

1) awk命令插入一个单独文件,然后调用

Awk -f awk-script-file input-files

其中,-f选项加载awk-script-file中的awk脚本,input-files跟上面的是一样的。

1) 正则表达式用作awk_pattern: /regexp/

例如:awk ‘/ ^[a-z]/‘ input_file

2) 布尔表达式用作awk_pattern,表达式成立时,触发相应的actions执行。

 表达式中可以使用变量(如字段变量$1,$2等)和/regexp/

② 布尔表达式中的操作符:

 

关系操作符: < > <= >= == !=
匹配操作符: value ~ /regexp/ 如果value匹配/regexp/,则返回真
value !~ /regexp/ 如果value不匹配/regexp/,则返回真
例如: awk ‘$2 > 10 {print "ok"}‘ input_file
      awk ‘$3 ~ /^d/ {print "ok"}‘ input_file

③ &&(与) 和 ||(或) 可以连接两个/regexp/或者布尔表达式,构成混合表达式。!(非) 可以用于布尔表达式或者/regexp/之前。

a) 正则表达式(/regexp/)

技术分享

passwd中小写字母a到d开头的。

a) 布尔表达式

变量(如字段变量$1  $2)和/regexp/;

关系操作

技术分享

: < > <= >= == !=

提取test.txt中chinese大于75为优秀。
匹配操作符: value ~ /regexp/ 如果value匹配/regexp/,则返回真
value !~ /regexp/ 如果value不匹配/regexp/,则返回真;

技术分享

提取passwd中匹配d开头的显示ok。

a) &&(与)、||(或)

 技术分享

模式包括两个特殊字段 BEGINEND。使用BEGIN语句设置计数和打印头。BEGIN语句使用在任何文本浏览动作之前,之后文本浏览动作依据输入文本开始执行。END语句用来在awk完成文本浏览动作后打印输出文本总数和结尾状态标志。

1) 动作:

实际动作在大括号{ }内指明。动作大多数用来打印。

1. awk的运行过程:

如果BEGIN 区块存在,awk执行它指定的actions

awk从输入文件中读取一行,称为一条输入记录。(如果输入文件省略,将从标准输入读取)

awk将读入的记录分割成字段,将第1个字段放入变量$1中,第2个字段放入$2,以此类推。$0表示整条记录。

把当前输入记录依次与每一个awk_cmdawk_pattern比较,看是否匹配,如果相匹配,就执行对应的actions。如果不匹配,就跳过对应的actions,直到比较完所有的awk_cmd

当一条输入记录比较了所有的awk_cmd后,awk读取输入的下一行,继续重复步骤,这个过程一直持续,直到awk读取到文件尾。

 awk读完所有技术分享的输入行后,如果存在END,就执行相应的actions

1) /etc/passwd文件 显示文件中用户名和登录shel技术分享

显示文件中用户名和登录shell,中间以逗号分隔

技术分享

显示文件中UID大于500的所有用户的用户名和登录shell

技术分享


显示/etc/passwd文件中的UID大于500的用户名和登录shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"

技术分享

函数及脚本的综合应用

 

1shell函数:shell允许将一组命令集或语句形成一个可用块,这些块称为shell函数。

 函数由两部分组成:函数标题、函数体。标题是函数名。函数体是函数内的命令集合。标题名应该唯一;如果不是,将会混淆结果,因为脚本在查看调用脚本前将首先搜索函数调用相应的shell

技术分享



技术分享





本文出自 “chaixinwang” 博客,请务必保留此出处http://chaixinwang.blog.51cto.com/13052229/1945129

shell正则表达二