鸟哥的Linux私房菜学习笔记(三)学习 Shell 与 Shell scripts——正规表示法与文件格式化处理

1.前言: 什么是正规表示法

如 vi, grep, awk ,sed 等等工具,因为她们有支持正规表示法, 所以,这些工具就可以使用正规表示法的特殊字节来进行字串的处理。但例如 cp, ls 等命令并未支持正规表示法, 所以就只能使用 bash 自己本身的万用字节而已。

正规表示法的字串表示方式依照不同的严谨度而分为: 基础正规表示法与延伸正规表示法。延伸型正规表示法除了简单的一组字串处理之外,还可以作群组的字串处理, 例如进行搜寻 VBird 或 netman 或 lman 的搜寻,注意,是『或(or)』而不是『和(and)』的处理, 此时就需要延伸正规表示法的帮助啦!

2.基础正规表示法

1)语系对正规表示法的影响

既然正规表示法是处理字串的一种表示方式,那么对字节排序有影响的语系数据就会对正规表示法的结果有影响!

使用正规表示法时,需要特别留意当时环境的语系为何, 否则可能会发现与别人不相同的撷取结果喔!

由於一般我们在练习正规表示法时,使用的是兼容於 POSIX 的标准,因此就使用『 C 』这个语系(注1)! 因此,底下的很多练习都是使用『 LANG=C 』这个语系数据来进行的喔!

为了要避免这样编码所造成的英文与数字的撷取问题,因此有些特殊的符号我们得要了解一下的!

    [:alnum:] 代表英文大小写字节及数字,亦即 0-9, A-Z, a-z

    [:alpha:] 代表任何英文大小写字节,亦即 A-Z, a-z

    [:blank:] 代表空白键与 [Tab] 按键两者
    [:cntrl:] 代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del.. 等等
    [:digit:] 代表数字而已,亦即 0-9
    [:graph:] 除了空白字节 (空白键与 [Tab] 按键) 外的其他所有按键
    [:lower:] 代表小写字节,亦即 a-z
    [:print:] 代表任何可以被列印出来的字节
    [:punct:] 代表标点符号 (punctuation symbol),亦即:" ' ? ! ; : # $...
    [:upper:] 代表大写字节,亦即 A-Z
    [:space:] 任何会产生空白的字节,包括空白键, [Tab], CR 等等
    [:xdigit:] 代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字节

    NR 目前 awk 所处理的是『第几行』数据
范例:搜寻行首为 # 开始的那一行,并列出行号
grep -n '^#' regular_express.txt
word$意义:待搜寻的字串(word)在行尾!
范例:将行尾为 ! 的那一行列印出来,并列出行号
grep -n '!$' regular_express.txt
.意义:代表『一定有一个任意字节』的字符!
范例:搜寻的字串可以是 (eve) (eae) (eee) (e e), 但不能仅有 (ee) !亦即 e 与 e 中间『一定』仅有一个字节,而空白字节也是字节!
grep -n 'e.e' regular_express.txt
\意义:跳脱字符,将特殊符号的特殊意义去除!
范例:搜寻含有单引号 ' 的那一行!
grep -n \' regular_express.txt
*意义:重复零个到无穷多个的前一个 RE 字符
范例:找出含有 (es) (ess) (esss) 等等的字串,注意,因为 * 可以是 0 个,所以 es 也是符合带搜寻字串。另外,因为 * 为重复『前一个 RE 字符』的符号, 因此,在 * 之前必须要紧接著一个 RE 字符喔!例如任意字节则为 『.*』 !
grep -n 'ess*' regular_express.txt
[list]意义:字节集合的 RE 字符,里面列出想要撷取的字节!
范例:搜寻含有 (gl) 或 (gd) 的那一行,需要特别留意的是,在 [] 当中『谨代表一个待搜寻的字节』, 例如『 a[afl]y 』代表搜寻的字串可以是 aay, afy, aly 即 [afl] 代表 a 或 f 或 l 的意思!
grep -n 'g[ld]' regular_express.txt
[n1-n2]意义:字节集合的 RE 字符,里面列出想要撷取的字节范围!
范例:搜寻含有任意数字的那一行!需特别留意,在字节集合 [] 中的减号 - 是有特殊意义的,他代表两个字节之间的所有连续字节!但这个连续与否与 ASCII 编码有关,因此,你的编码需要配置正确(在 bash 当中,需要确定 LANG 与 LANGUAGE 的变量是否正确!) 例如所有大写字节则为 [A-Z]
grep -n '[A-Z]' regular_express.txt
[^list]意义:字节集合的 RE 字符,里面列出不要的字串或范围!
范例:搜寻的字串可以是 (oog) (ood) 但不能是 (oot) ,那个 ^ 在 [] 内时,代表的意义是『反向选择』的意思。 例如,我不要大写字节,则为 [^A-Z]。但是,需要特别注意的是,如果以 grep -n [^A-Z] regular_express.txt 来搜寻,却发现该文件内的所有行都被列出,为什么?因为这个 [^A-Z] 是『非大写字节』的意思, 因为每一行均有非大写字节,例如第一行的 "Open Source" 就有 p,e,n,o.... 等等的小写字
grep -n 'oo[^t]' regular_express.txt
\{n,m\}意义:连续 n 到 m 个的『前一个 RE 字符』
意义:若为 \{n\} 则是连续 n 个的前一个 RE 字符,
意义:若是 \{n,\} 则是连续 n 个以上的前一个 RE 字符!
意义:若为 \{n\} 则是连续 n 个的前一个 RE 字符,
意义:若是 \{n,\} 则是连续 n 个以上的前一个 RE 字符!
 范例:在 g 与 g 之间有 2 个到 3 个的 o 存在的字串,亦即 (goog)(gooog)
grep -n 'go\{2,3\}g' regular_express.txt

2)grep 的一些进阶选项

较进阶的 grep 选项与参数给大家参考


3)基础正规表示法练习

4)基础正规表示法字符汇整(characters)

RE 字符意义与范例意义与范例

^word意义:待搜寻的字串(word)在行首!

5)sed 工具: 行的新增/删除, 行的取代/显示, 搜寻并取代, 直接改档

sed 本身也是一个管线命令,可以分析 standard input 的啦! 而且 sed 还可以将数据进行取代、删除、新增、撷取特定行等等的功能呢!


以行为单位的新增/删除功能

3.延伸正规表示法

4.文件的格式化与相关处理

1)printf: 格式化列印


2)awk:好用的数据处理工具

awk 也是一个非常棒的数据处理工具!相较於 sed 常常作用於一整个行的处理, awk 则比较倾向於一行当中分成数个『栏位』来处理。因此,awk 相当的适合处理小型的数据数据处理呢!awk 通常运行的模式是这样的:

[root@www ~]# awk '条件类型1{动作1} 条件类型2{动作2} ...' filename


由上面这个例子你也会知道,在每一行的每个栏位都是有变量名称的,那就是 $1, $2... 等变量名称$0 代表『一整列数据』的意思。

,那么 awk 怎么知道我到底这个数据有几行?有几栏呢?这就需要 awk 的内建变量的帮忙啦~

    NF 每一行 ($0) 拥有的栏位总数

    FS 目前的分隔字节,默认是空白键


awk 的逻辑运算字节

3)文件比对工具:, diff, cmp, patch

diff 就是用在比对两个文件之间的差异的,并且是以行为单位来比对的!一般是用在 ASCII 纯文字档的比对上。 由於是以行为比对的单位,因此 diff 通常是用在同一的文件(或软件)的新旧版本差异上!

cmp 主要也是在比对两个文件,他主要利用『位组』单位去比对, 因此,当然也可以比对 binary file 罗~

patch 这个命令与 diff 可是有密不可分的关系啊!两个不同版本的文件。 那么,如果要『升级』呢?就是『将旧的文件升级成为新的文件』时,应该要怎么做呢? 其实也不难啦!就是『先比较先旧版本的差异,并将差异档制作成为补丁档,再由补丁档升级旧文件』即可。

4)文件列印准备工具: pr

当我们在列印的时候, 可以同时选择与配置每一页列印时的标头吧!也可以配置页码呢!

使用 pr 就能够达到这个功能了。




参考自:http://cn.linux.vbird.org/linux_basic/linux_basic.php

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值