正则表达式与文件格式化处理

正则表达式(Regular Expression)是通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串。简单地说,正则表达式就是用在字符串的处理上面的一项“表示式”。

正则并不是一个工具程序,它是一种字符串处理的标准依据,如果你想以正则表达式的方式处理字符串,就得要使用支持正则表达式的工具程序才行,如vi、sed、awk、grep

正则表达式对于系统管理员来说实在是很重要,可用此将重要信息选取出来,并产生便于查阅的报表来简化管理流程。到达更精简处理日常事物。

正则表达式基本上是一种“表示法”,只要工具程序支持这种表示法,那么该工具程序就可以用来作为正则表达式的字符串处理之用。例如vi、grep、sed、awk等工具,因为它们有支持正则,所以这些工具就可以使用正则的特殊字符来进行字符串的处理。但如cp、ls等命令 并未支持正则,多依旧只能使用bash自身的通配符而已。

正则表达式的字符串表示方式依照不同的严谨度而分为  基础正则表达式  和  扩展正则表达式。


基础正则表达式


文件其实记录的仅有0和1(二进制文件),我们看到的字符文字都是通过编码表转换来的。由于不同语系的编码数据并不相同,所以就会造成数据选取结果的区别。使用正则表达式时,需要特别留意当时环境的语系为何,否则可能会发现与别人不相同的选取结果。

以下特殊符号需要我们了解下:

特殊正则符号


grep的一些高级用法:

grep高级用法

dmesg  |  grep  -n  -A3  -B2  'eth'    #列出关键字所在前两行和后三行

grep是一个很常见也很常用的命令,他最重要的功能就是进行字符串数据的对比,然后将符合用户需求的字符串打印出来。

需要说明的是,grep在数据中查找一个字符串时,是以整行为单位来进行数据的选取的!


基础正则表达式字符(characters):

正则表达式特殊字符




扩展的正则表达式:

以上这些就是扩展的正规表示法的特殊字节。另外,要特别强调的是,那个 ! 在正规表示法当中并不是特殊字节, 所以,如果你想要查出来文件中含有 ! 与 > 的字行时,可以这样:

grep -n '[!>]' regular_express.txt



sed工具:

sed本身也是一个管道命令,可以分析standard input,而且sed还可以将数据进行替换、删除、新增、选取特定行等的功能。

sed命令用法

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

以行为单位的替换和显示功能;

部分数据的查找并替换的功能;

直接修改文件内容;



awk:好用的数据处理工具

awk是一个非常棒的数据处理工具。相比于sed常常作用于一整行的处理,awk比较倾向于将一行分成数字各”字段“来处理。因此,awk相当适合处理小型的数据。

awk主要是处理每一行的字段内数据,而默认的字段分隔符为空格键或tab键。

awk '条件1 {动作1} 条件2 {动作2} ......' filename

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

每一行的每个字段都是有变量名称的,那就是$1,$2...等变量名称。

$0代表这一行,$1$2$3代表这行的字段。

awk内建变量:

awk内建变量

列出每一行的账号(就是$1);

列出目前处理的行数(就是awk内的NR变量);

并且说明,该行有多少字段(就是awk内的NF变量);

awk的逻辑运算符:

所有awk动作,即在 { } 内的动作,如果有需要多个命令辅助时,可利用“;”间隔,或者直接以【Enter】按键来隔开每个命令,例如上面的范例中,用了三个【Enter】;

逻辑运算当中,如果是“等于”的情况,则务必使用两个等号“==”;

格式化输出时,在printf的格式设置当中,务必加上\n,才能进行分行;

与bash,shell的变量不同,在awk当中,变量可以直接使用,不需要加上$符号。


格式化打印:printf

打印格式化这个printf命令,乍看之下好像也没什么很重要的。不过,如果你需要自行编写一些软件,需要将一些数据在屏幕上漂漂亮亮的输出的话,那么printf可也是一个很不错的工具。

printf命令用法


printf用法举例


文件比较工具:diff、cmp、patch

diff:通常用于比较同一软件的不同版本之间,比较配置文件与源文件的区别,并且是以行为单位来比较的。

用diff比较文件真的是很简单。不过,你不要用diff去比较两个完全不想干的文件,因为比不出个结果来!另外,diff也可以比较不同目录下相同文件名的内容。

diff用法


cmp:主要也是比较两个文件,但它主要利用“字节”单位去比较,当然也可以比较二进制文件。

diff主要是以“行”为单位去比较,cmp则是以“字节”为单位去比较,这并不相同。

cmp命令


patch:patch与diff有密不可分的关系!比较新旧文件的区别,并将区别文件制作成为系统补丁文件,再由补丁文件更新旧文件即可。

一般由diff制作出的比较文件通常使用.patch扩展名。

利用diff制作补丁文件
patch命令的用法



重点回顾:

正则表达式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为;

正则表达式通过一些特殊符号的辅助,可以让用户轻易到达查找、删除、替换某特定字符串的处理程序;

只要工具程序支持正则表达式,那么该工具程序就可以用来作为正则表达式的字符串处理之用;

正则表达式与通配符是完全不一样的。通配符(wildcard)代表的是bash操作接口的一个功能,但正则表达式则是一种字符串处理的表示方式;

使用grep或其他工具进行正则表达式的字符串比较时,因为编码的问题会有不同的状态,因此,你最好将LANG等变量设置为C或者是en等英文语系;

grep与egrep在正则表达式里面是很常见的两个程序,其中,egrep支持更严谨的正则表达式的语法;

由于编码系统的不同,不同的语系(LANG)会造成正则表达式选取数据的区别,因此可利用特殊符号如[:upper:]来替代编码编码范围较佳;

由于严谨度的不同,正则表达式之上还有更严谨的扩展正则表达式;

基础正则表达式的特殊字符由 *  ?  [ ]  [ - ]  [ ^ ]  ^  $等;

常见的正则表达式工具有 grep 、sed、vim、awk;

printf可以通过一些特殊符号来将数据进行格式化输出;

awk可以使用字段为依据,进行数据的重新整理与输出;

文件的比较中,可利用diff及cmp进行比较,其中diff主要用在纯文本文件方面的新旧版本比较;

patch命令可以将旧版数据更新到新版(主要由diff创建patch的补丁来源文件)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 概念 正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expre...
    dxldeng阅读 2,463评论 0 2
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,131评论 2 34
  • sed与awk实例 文本间隔 在每一行后面增加一空行 将原来的所有空行删除并在每一行后面增加一空行。这样在输出的文...
    stuha阅读 1,881评论 0 21
  • 冬天供暖室内温度不低于18℃,热水器调节根据自己的判断,夏天42℃,冬天46℃左右。 至于湿度,没有可以量化。但是...
    安南美阅读 123评论 0 0
  • 1、今天吃到了家厨的菜,黄豆猪蹄,很幸福 2、工作的时候可以看很多关于时政的文章,作者新颖的观点,这样的工作让我每...
    活跃在兔子毛顶端阅读 225评论 0 2