《鸟哥的Linux私房菜—基础学习篇》正则表达式与文件格式化处理

正则表达式:处理字符串的方法,以行为单位进行字符串的处理行为,正则表达式经过一些特殊符号的辅助,让用户轻易达到查找、删除、替换某特定字符串的处理程序。git

正则表达式基本上是一种“表示法”,只要工具程序支持这种表示法,那么该工具程序就能够用来做为正则表达式的字符串处理之用。正则表达式

基础正则表达式

语系对正则表达式的影响;工具

  • 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

使用正则表达式时,须要特别留意当时的环境语系,不然会发现与别人不一样的选取结果编码

为了不编码所形成的英文与数字选取的问题,特殊符号:命令行

  • [: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”

查找特定的字符串字符串

利用中括号[]来查找集合字符字符串处理

行首和行尾字符^$it

^符号在字符集和符号(中括号[])以内和以外是不一样的,在[]内表明“反向选择”,在[]以外表明定位在行首io

找出空白行:^$(只有行首和行尾)function

任意一个字符.(小数点):表明必定有一个任意字符

与重复字符*(星号):表明重复前一个字元,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. 读入第一行,并将第一行的数据填入变量名称中
  2. 依据条件类型的限制,判断是否须要进行后面的操做
  3. 作完全部的动做与条件类型
  4. 若还有后续的”行“的数据,重复以上1~3步骤,直到全部的数据都读完为止

awk以行为一次处理的单位,而以字段为最小处理的单位

awk内置变量:

  • NF:每一行拥有的字段总数
  • NR:目前awk所处理的是”第几行“的数据
  • FS:目前的分隔符,默认是空格键

awk逻辑运算符:> < >= <= == !=

  • 全部awk的动做,即在{}内的动做,若是有须要多个命令辅助时,可利用分号;间隔,或者直接以【enter】键来隔开每一个命令
  • 逻辑运算当中,若是是”等于“的状况,务必使用==
  • 格式化输出时,在printf的格式设置中,务必加上\n,才能进行分行
  • 变量能够直接使用,不须要加上$号

文件比较工具

同一个软件的不一样版本之间,比较配置文件与源文件的区别。

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

相关文章
相关标签/搜索