正则表达式 、文本处理工具

正则表达式

正则表达式是通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串
基础正则表达式(grep)

grep    基本正则表达式
功能:
    显示匹配信息所在行     
options:
-o     只显示匹配到的行
eg:
-v     只显示未匹配到的行
-e     或
eg:grep -e  “cat”  -e  “dog”  file1   显示含有cat或dog的行
-w    匹配整个单词(精确查找)
-c     统计匹配的行数
-n     显示匹配结果的行号
-q     静默模式,不显示匹配结果
-A n  同时显示匹配到的行与它的后n行
-B n  同时显示匹配到的行与它的前n行
-C n  同时显示匹配到的行与它的前后n行
-E     =egrep
-F     =fgrep
-i      忽略字符大小写
–color=auto

gerp
例:文件夹里有以下内容


字符匹配:
. 匹配任意单个字符

例:


[]匹配指定范围内的任意单个字符

例:

[^] 匹配指定范围外的任意单个字符

例:


[:alnum:] 字母和数字
例:


[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母 [:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字 [:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号

匹配次数:用在要指定次数的字符后面,用于指定前面的字
符要出现的次数
.*匹配前面的字符任意次,包括0次
贪婪模式:尽可能长的匹配
例:


.* 任意长度的任意字符
例:r中间任意长度任意字符


? 匹配其前面的字符0或1次
例:


+ 匹配其前面的字符至少1次
例: "ro+t" 包括一次


{n} 匹配前面的字符n次
例: ro{2}t 只能2次,3个都不行

{m,n} 匹配前面的字符至少m次,至多n次
例:

{,n} 匹配前面的字符至多n次
例:


{n,} 匹配前面的字符至少n次
例:


位置锚定:定位出现的位置
cat a1 内容为例:


^ 行首锚定,用于模式的最左侧
例:


$ 行尾锚定,用于模式的最右侧
例:


^PATTERN$ 用于模式匹配整行

^$ 空行
^[[:space:]]*$ 空白行
下面用nano a1 添加了空格



例:删除空格



< 或 \b 词首锚定 ,用于单词模式的左侧
例:和匹配整个单词类似
> 或 \b 词尾锚定;用于单词模式的右侧

<PATTERN> 匹配整个单词
例:图中 come可以在符号除去引号''下划线,第一个命令有个bcomes也有come,所以要锚定词首,词尾。


文本处理工具

抽取文本的工具
文件内容:less和 cat
文件截取: head和tail
按列抽取: cut
按关键字抽取: grep
文件查看命令: cat, tac,rev

查看(cat、less、more、head、tail、cut、paste)

head

用法:head [选项]… [文件]…

head[OPTION]…[FILE]…
默认将每个指定文件的头10行显示到标准输出。如果指定了多于一个文件,在每一段输出前会给出文件名作为
文件头。如果不指定文件,或者文件为“-“,则从标准输入读取数据
-c  显示每个文件的前k字节内容;如果附加“-“参数,则除了每个文件的最后K字节数据外显示剩余全部内容
-n  显示每个文件的前k行内容;如果附加“-“参数,则除了每个文件的最后K 行外显示剩余全部内容
-q  –quiet,–silent 不显示包含给定文件名的文件头
-v  –verbose 总是显示包含给定文件名的文件头

tail

tail[OPTION]…[FILE]…

tail – 输出文件的末尾部分,默认在标准输出上显示每个文件的最后10行,如果多于一个文件会在每一段输出
前会给出文件名作为文件头,一个接一个地显示。如果不指定文件,或者文件为“-“,则从标准输入读取数据。
-c  –bytes=N 输出最后N个字节
-n  –lines=N 输出最后N行而非默认的最后10行
-q  –quiet –silent 从不输出给出文件名的首部
-v  –verbose 总是输出给出文件名的首部
-f  –follow[={name|descriptor}] 当文件增长时输出后续添加的数据,动态显示。跟踪显示文件新追加的
内容常用日志监控。



拓展:与head相似,如果N(字节或者行数)的第一个字符为`+’,那么从每个文件的开头算起的第N项开始显示,否则,显示该文件的最后N项。


cut

按列抽取文本

cut[OPTION]…[FILE]…
-d –DELIMITER:指明分隔符,默认为Tab,一般与-f 连用。
-f 选取第几列
n  指定某一列
n-m  指定n列到m列
n,n-m  混合指定
–output-delimiter 指定输出符

示例:截取用户名与UID且以“+”符号为分隔符。
cut -d: -f1,3 –output-delimiter=’+’ /etc/passwd



-c [n-m]按字符切割 第n个字符到第m个字符
-b [n-m]按字节切割 第n个字节到第m个字节
示例:截取/etc/passwd文件的前四个字符。
cut -c 1-4 /etc/passwd


经典练习题:显示当前主机第一个网卡的IP地址

ifconfig |head -n 2| tail -n 1| tr -s ‘ ‘ : |cut -d: -f4
paste
将每个指定文件里的每一行整合到对应一行里写到标准输出,默认用制表符分隔。如果没有指定文件,或指定文件为”-“,程序将从标准输入读取数据。
paste[OPTION]…[FILE]…
-d分隔符:指定分隔符,默认用TAB
-s: 不使用平行的行目输出模式,而是每个文件占用一行
paste f1 f2
paste -s f1 f2


wc

收集文本统计数据
wc命令的功能为统计指定文件中的字节数、单词数、行数并将统计结果显示输出
可以对文件或STDIN中的数据运行
-c –bytes 打印字节数-m –chars 打印字符数 -l –lines 打印行数 -L –max-line-length 打印最长行的长度-w –words 打印单词数


sort

文本排序
把整理过的文本显示在STDOUT,不改变原始文件
sort [options] file
常用选项
sort

 -r 执行反方向(由上至下)整理
   -n 执行按数字大小整理
   -f 选项忽略(fold)字符串中的字符大小写
   -u 选项(独特,unique)删除输出中的重复行
   -t c 选项使用c做为字段界定符
   -k X 选项按照使用c字符分隔的X列来整理能够使用多次

示例:

cat /etc/passwd | sort
#排序默认以第一个数据排序,默认以字符串形式排序,以a开始升序排序,首字母相同则比较下一位的顺序。
cat /etc/passwd | sort -t: -k3
#/etc/passwd中的以“:”为间隔符,对其第三栏排序,默认以第一数据排序,相同的话比较下一位的顺序。
cat /etc/passwd | sort -nt: -k3
#/etc/passwd中的以“:”为间隔符,对其第三栏排序,按数字整体大小升序排列。
cat /etc/passwd | sort -rnt: -k3
#/etc/passwd中的以“:”为间隔符,对其第三栏排序,按数字整体大小以升序相反的方式降序排列。

uniq

uniq命令:从输入文件或者标准输入中删除前后相接的重复的行,注意:连续且完全相同方为重复
uniq[OPTION]…[FILE]…

-c  –count 显示每行重复出现的次数
-d  –repeated 仅显示重复过的行
-D  –all-repeated[=delimit-method 显示所有重复的行
-u  –unique 仅显示不曾重复的行
-f  –skip-fields=N   比较时跳过前N 列
-s, –skip-chars=N    比较时跳过前N 个字符
-I  –ignore-case     在比较的时候不区分大小写
-w  –check-chars=N   对每行第N 个字符以后的内容不作对照

常和sort命令一起配合使用:
sort test | uniq –c


接下来介绍比较实用的功能,需要diff与patch功能结合使用。

diff
比较两个文件之间的区别
命令:diff
patch
让用户利用设置修补文件的方式,修改,更新原始文件。
命令:patch

上面两条命令相结合可以做出大事——“打补丁”或“更新”
diff命令的输出被保存在一种叫做“补丁”的文件中
使用-u选项来输出“统一的(unified)”diff格式文
件,最适用于补丁文件。
patch复制在其它文件中进行的改变(注意:要谨慎使用)
适用-b选项来自动备份改变了的文件

示例:



换个角度,你也可以理解为对文件进行更新。同时,不要担心旧版文件的丢失,每次更新都会产生后缀为“.orig”的文件,里面存储着你的旧版文件。


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

推荐阅读更多精彩内容

  • 概念 正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expre...
    dxldeng阅读 2,395评论 0 2
  • 正则表达式及文本处理 通俗点说,正则表达式就是处理字符串的方法,更加快速简洁的代表各个要求参数,一般用于描述字符排...
    Az_d981阅读 1,556评论 0 0
  • 基础命令 主要的命令和快捷键 Linux系统命令由三部分组成:cmd + [options]+[operation...
    485b1aca799e阅读 1,016评论 0 0
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,016评论 2 34
  • 1. 抽取文本的工具 2.分析文本的工具 3.Linux文本处理三剑客 4. 文件查看命令:cat, tac,re...
    尛尛大尹阅读 433评论 0 0