21.1.3
扩展正则表达式
RE 字符 | 意义与范例 |
---|---|
+ | 意义:重复『一个或一个以上』的前一个 RE 字符 范例:搜寻 (god) (good) (goood)... 等等的字串。 那个 o+ 代表『一个以上的 o 』所以,底下的运行成果会将第 1, 9, 13 行列出来。egrep -n 'go+d' regular_express.txt |
? | 意义:『零个或一个』的前一个 RE 字符 范例:搜寻 (gd) (god) 这两个字串。 那个 o? 代表『空的或 1 个 o 』所以,上面的运行成果会将第 13, 14 行列出来。 有没有发现到,这两个案例( 'go+d' 与 'go?d' )的结果集合与 'go*d' 相同? 想想看,这是为什么喔! _egrep -n 'go?d' regular_express.txt |
| | 意义:用或( or )的方式找出数个字串 范例:搜寻 gd 或 good 这两个字串,注意,是『或』! 所以,第 1,9,14 这三行都可以被列印出来喔!那如果还想要找出 dog 呢?egrep -n 'gd|good' regular_express.txt egrep -n 'gd|good|dog' regular_express.txt |
() | 意义:找出『群组』字串 范例:搜寻 (glad) 或 (good) 这两个字串,因为 g 与 d 是重复的,所以, 我就可以将 la 与 oo 列于 ( ) 当中,并以 | 来分隔开来,就可以啦!egrep -n 'g(la|oo)d' regular_express.txt |
()+ | 意义:多个重复群组的判别 范例:将『AxyzxyzxyzxyzC』用 echo 叫出,然后再使用如下的方法搜寻一下!echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C'上面的例子意思是说,我要找开头是 A 结尾是 C ,中间有一个以上的 "xyz" 字串的意思~ |
格式化打印:printf
[root@www ~]# printf '列印格式' 实际内容
选项与参数:
关于格式方面的几个特殊样式:
a 警告声音输出
倒退键(backspace)
f 清除萤幕 (form feed)
输出新的一行
亦即 Enter 按键
水平的 [tab] 按键
v 垂直的 [tab] 按键
xNN NN 为两位数的数字,可以转换数字成为字节。
关于 C 程序语言内,常见的变量格式
%ns 那个 n 是数字, s 代表 string ,亦即多少个字节;
%ni 那个 n 是数字, i 代表 integer ,亦即多少整数码数;
%N.nf 那个 n 与 N 都是数字, f 代表 floating (浮点),如果有小数码数,
假设我共要十个位数,但小数点有两位,即为 %10.2f 罗!
awk:好用的数据处理工具
awk 处理流程:
- 读入第一行,并将第一行的数据填入 $0, $1, $2.... 等变量当中;
- 依据 "条件类型" 的限制,判断是否需要进行后面的 "动作";
- 做完所有的动作与条件类型;
- 若还有后续的『行』的数据,则重复上面 1~3 的步骤,直到所有的数据都读完为止。
awk 内建变量:
变量名称 | 代表意义 |
---|---|
NF | 每一行 ($0) 拥有的栏位总数 |
NR | 目前 awk 所处理的是『第几行』数据 |
FS | 目前的分隔字节,默认是空白键 |
例:
[root@www ~]# last -n 5| awk '{print $1 " lines: " NR " columns: " NF}' root lines: 1 columns: 10 root lines: 2 columns: 10 root lines: 3 columns: 10 dmtsai lines: 4 columns: 10 root lines: 5 columns: 9 # 注意喔,在 awk 内的 NR, NF 等变量要用大写,且不需要有钱字号 $ 啦!``` awk 逻辑运算字节:
awk 逻辑运算字节
运算单元 | 代表意义 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
== | 等于 |
!= | 不等于 |
例:
[root@www ~]# cat pay.txt | > awk 'NR==1{printf "%10s %10s %10s %10s %10s ",$1,$2,$3,$4,"Total" } NR>=2{total = $2 + $3 + $4 printf "%10s %10d %10d %10d %10.2f ", $1, $2, $3, $4, total}' Name 1st 2nd 3th Total VBird 23000 24000 25000 72000.00 DMTsai 21000 20000 23000 64000.00 Bird2 43000 42000 41000 126000.00
- awk 的命令间隔:所有 awk 的动作,亦即在 {} 内的动作,如果有需要多个命令辅助时,可利用分号『;』间隔, 或者直接以 [Enter] 按键来隔开每个命令,例如上面的范例中,鸟哥共按了三次 [enter] 喔!
- 逻辑运算当中,如果是『等于』的情况,则务必使用两个等号『==』!
- 格式化输出时,在 printf 的格式配置当中,务必加上 ,才能进行分行!
- 与 bash shell 的变量不同,在 awk 当中,变量可以直接使用,不需加上 $ 符号。