《鸟哥的Linux私房菜—基础学习篇》正则表达式与文件格式化处理
正则表达式:处理字符串的方法,以行为单位进行字符串的处理行为,正则表达式通过一些特殊符号的辅助,让用户轻易达到查找、删除、替换某特定字符串的处理程序。
www.zhishiwu.com
正则表达式基本上是一种“表示法”,只要工具程序支持这种表示法,那么该工具程序就可以用来作为正则表达式的字符串处理之用。
基础正则表达式
语系对正则表达式的影响;
LANG=C时:0 1 2 3 4 。。。 A B C D … Z a b c d 。。。 z
LANG=zh_CN时:0 1 2 3 4 … a A b B c C d D … z Z
使用正则表达式时,需要特别留意当时的环境语系,否则会发现与别人不同的选取结果
为了避免编码所造成的英文与数字选取的问题,特殊符号:
www.zhishiwu.com
[:alnum:] 英文大小写字符及数字
[:alpha:]英文大小写字符
[:upper:]英文大写字符
[:lower:]英文小写字符
[:digit:]数字
grep [-A] [-B] [—color==auto] ‘搜寻的字符串’filename
参数:
-A:后面可加数字,为after的意思,除了列出该行外,后续的n行也列出来
-B:后面可加数字,为befor的意思,除了列出该行外,前面的n行也列出来
语系已经使用“export LANG=C”的设置值
grep已经使用alias设置成为“grep –-color==auto”
查找特定的字符串
利用中括号[]来查找集合字符
行首和行尾字符^$
^符号在字符集和符号(中括号[])之内和之外是不同的,在[]内代表“反向选择”,在[]之外代表定位在行首
找出空白行:^$(只有行首和行尾)
任意一个字符.(小数点):代表一定有一个任意字符
与重复字符*(星号):代表重复前一个字元,0到无穷多次的意思
“.*”代表零个或任意多个字符的意思
限定连续RE字符的范围{}:必须使用转义字符 /
正则表达式的特殊字符与一般在命令行输入命令的“通配符”并不相同
sed工具
sed [-nefr] 动作
参数:
-n:使用安静模式,在一般sed用法中,所有来自STDIN的数据一般都会列出到屏幕上,但如果加上参数-n后,则只有经过sed特殊处理的哪一行(或操作)才会被列出来
-e:直接在命令行模式上进行sed的动作编辑
-f:直接将sed的动作写在一个文件内,-f filename则可以执行filename内的sed动作
-r:sed的动作支持扩展型正则表达式语法(默认是基础型正则表达式语法)
-i:直接修改读取的文件内容,而不是由屏幕输出
动作说明:
[n1,[n2]] function
n1,n2:一般代表选择进行动作的行数
function有如下参数:
a:新增
c:替换
d:删除
i:插入
p:打印
s:替换,’s/要被替换的字符/新的字符串/g’
sed后边接的动作,务必以“两个单引号括住
$代表最后一行
新增好几行的时候,每一行中间必须要以反斜杠来进行新行的增加
awk:好用的数据处理工具
sed常常作用于一整行的处理,awk比较倾向于将一行分成数个”字段“来处理。因此,awk相当适合处理小型的数据处理
awk ‘条件类型1[动作1]条件类型2[动作2]…’filename
awk主要处理每一行的字段内的数据,而默认的字段的分隔符为空格键或[Tab]键
每一行的每一个字段都有变量名称,$1,$2。$0代表一整行数据的意思
整个awk的处理流程是:
读入第一行,并将第一行的数据填入变量名称中
依据条件类型的限制,判断是否需要进行后面的操作
做完所有的动作与条件类型
若还有后续的”行“的数据,重复以上1~3步骤,直到所有的数据都读完为止
awk以行为一次处理的单位,而以字段为最小处理的单位
awk内置变量:
NF:每一行拥有的字段总数
NR:目前awk所处理的是”第几行“的数据
FS:目前的分隔符,默认是空格键
awk逻辑运算符:> < >= <= == !=
所有awk的动作,即在{}内的动作,如果有需要多个命令辅助时,可利用分号;间隔,或者直接以【enter】键来隔开每个命令
逻辑运算当中,如果是”等于“的情况,务必使用==
格式化输出时,在printf的格式设置中,务必加上/n,才能进行分行
变量可以直接使用,不需要加上$号
文件比较工具
同一个软件的不同版本之间,比较配置文件与源文件的区别。
www.zhishiwu.com
diff:以行为单位比较,一般用在ASCII纯文本文件的比较上。通常是用在同一的文件(或软件)的新旧版本区别
diff [-bBi] from-file to-file
参数:
-b:忽略一行当中仅有多个空白的区别
-B:忽略空白行的区别
-i:忽略大小写
cmp [-s] file1 file2
主要利用”字节“单位去比较
参数:
-s:将所有不同点的字节都列出来,因为cmp默认仅会输出第一个发现的不同点
patch
将区别文件制作成补丁文件:
dif –Naur 旧文件 新文件 > *.patch
更新:patch –pN < patch_file
还原:patch –R –pN < patch_file
参数:
-p:后面的N表示取消几层目录
-R:代表还原,将新的文件还原成旧的版本
文件打印准备:pr