12.1什么是正则表达式

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

vi、grep、awk、sed支持正则表达式,而cp,ls等命令只能使用bash自身的通配符

12.2基础正则表达式

grep高级参数:

grep [-A] [-B] [--color=auto]  'string'   filename

-A:after的意思,除了列出该行外,后续的n行也列出来

-B:before的意思,除了列出该行外,前面的n行也列出来

--color=auto 可将正确的那个选取数据列出颜色

基础正则表达式练习:

例一:查找特定字符串

grep -n ‘the’ regular_express.txt

grep -vn 'the' regular_express.txt   (-v反向选择)

例二:利用中括号[]来查找集合字符

grep -n 't[ae]st' regular_express.txt  (可匹配test或tast)

grep -n '[^g]oo' regular_express.txt  (oo前不能有g的字符)

grep -n '[^[:lower:]]oo' regular_express.txt   ([:lower:]代表a-z的意思)

例三:行首和行尾字符

grep -n '^test' regular_express.txt

(注:^在[]内表示“反向选择”,在[]外表示定位在行首)

grep -n '\.$' regular_express.txt   (找出行尾结束为小数点的那一行)

例四:任意一个字符.与重复字符*

grep -n ‘g..d’ regular_express.txt   (可匹配good,glad等字符)

grep -n 'ooo*' regular_express.txt   (匹配至少两个o以上的字符)

grep -n 'g.*g' regular_express.txt    (找出g开头与g结尾的字符串,.*表示o个或多个任意字符的意思)

例五:限定连续RE字符范围{}

grep -n 'o\{2\}' regular_express.txt  (找出两个o的字符串)

grep -n ‘go\{2,5\}g’ regular_express.txt  (g后有两个到5个o,然后接一个g的字符串)

grep -n ‘go\{2,\}g’ regular_express.txt  (g后有两个及以上的o,然后接一个g的字符串)

基础正则表达式字符:

^word :待查找的字符串(word)在行首

word$ :待查找的字符串(word)在行尾

. :代表一定有一个任意字符的字符

\   : 转义字符,将特殊符号的特殊意义去除

*  : 重复0个或多个的前一个字符

[list] :从字符集合的RE字符里面找出想要选取的字符

[n1-n2]:从字符集合的RE字符里面找出想要选取的字符范围

[^list] :从字符集合的RE字符里面找出不要的字符串或范围

\{n,m\}:连续n到m个的前一个RE字符,\{n\}表示连续n个,\{n,\}表示连续n个及以上

sed工具:(详见sed & awk)

格式: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 :新增,a的后面可以接字符串,而这些字符串会在目前的下一行出现

i  :插入,i 的后面可以接字符串,而这些字符串会在目前的上一行出现

c :替换,c的后面可以接字符串,这些字符串可以替换n1,n2之间的行

s :替换,可以直接进行替换工作,通常这个s可以搭配正则表达式

d :删除,因为是删除,所以d后面通常不接任何参数

p :打印,也就是将某个选择的数据打印出来,通常p会与参数sed -n一起运行

12.3扩展的正则表达式

+ :重复一个或多个的前一个RE字符

? :0个或一个的前一个RE字符

|  :用或的方式找出字符串

() :找出“组”的字符串  (如:egrep -n ‘g(la|oo)d’ regular_express.txt  表示找出glad或good字符串)

()+:多个重复组的判别   (如echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C'  找出开头是A结尾是C,中间有一个以上的“xyz”字符串)

12.4文件的格式化与相关处理

格式化打印 printf:

格式:printf '打印格式' 实际内容

格式方面的几个特殊样式:

  \a 警告声音输出

  \b 退格键

  \f 清除屏幕

  \n 输出新的一行

  \r 亦即Enter按键

  \t 水平的tab按键

  \v 垂直的tab按键

  \xNN NN为两个数字,可以转换数字成字符

关于C语言内,常见的变量格式

  %ns :n代表数字,s代表string,即多个字符

  %ni : n代表数字,i代表interger,即多少整数字数

  %N.nf :n和N都是数字,f代表float,如十个位数,小数点两位为 %10.2f

awk工具 (详见sed & awk):

格式:awk ‘条件类型1{动作1} 条件类型2{动作2} ...’ filename

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

变量:

NF : 每一行($0)拥有的字段总数

NR :目前awk所处理的是“第几行”数据

FS :目前的分隔字符,默认是空格键

逻辑运算符:

>  <  >=  <=  ==  !=

例:

cat /etc/passwd | awk '{FS=":"} $3<10 {print $1 "\t" $3}'

cat pay.txt | awk '{if(NR==1) printf "%10s %10s,%10s\n",$1,$4,"Total"} NR>=2 {total=$1+$4 printf "%10s %10d %10.2f\n",$1,$3,total}'

文本比较工具diff:

diff用于比较两个文件之间的区别,并且是以行为单位的,diff也可以比较两个目录

格式:diff [-bBi] from-file to-file

-b :忽略一行当中仅有多个空白的区别(如“about me”和“about           me”视为相同)

-B:忽略空白行的区别

-i:忽略大小写的区别

patch -pN <patch_file  更新

patch -R -pN <patch_file   还原

范例:以/tmp/test内的passwd.old 与passwd.new 制作补丁文件,并更新旧版数据

diff -Naur passwd.old passwd.new >passwd.patch

更新旧文件,变成和新文件一样

patch -p0 <passwd.patch

(pathing file passwd.old)

恢复旧文件的内容

patch -R -p0 <passwd.patch

文件打印pr:

pr /etc/man.config  (打印文本文件man.config)

鸟哥的linux私房菜——第12章 正则表达式与文件格式化处理的更多相关文章

  1. 别人的Linux私房菜(12)正则表达式与文件格式化处理

    vi gerp awk sed支持正则表达式   cp ls不支持,只能使用bash本身的通配符 正则表达式分为基础正则表达式和拓展正则表达式 使用正则表达式注意语系的影响 http://cn.lin ...

  2. 鸟哥的linux私房菜——第五章学习(Linux的文件权限与目录配置)

    ******************第五章学习****************** 1.[重要的三个概念] 1).文件拥有者(使用者):User,该文件/文件夹只能我来读写: 2).群组:Group, ...

  3. 鸟哥的Linux私房菜——第十一章

    视频链接: 土豆:http://www.tudou.com/programs/view/yT0PfIWU720 B站(推荐): http://www.bilibili.com/video/av9877 ...

  4. 鸟哥的linux私房菜——第七章学习(Linux 磁盘与文件系统管理)

    1.1).文件系统特征 我们称呼一个可被挂载的数据为一个文件系统而不是一个分区! 文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到 inode 中,至于实际数据则放置到 data ...

  5. 鸟哥的linux私房菜——第20章 启动流程、模块管理与loader

    20.1 Linux启动流程分析 Linux启动过程: 按下开机电源后计算机硬件主动读取BIOS来加载硬件信息以及硬件系统的自我测试,之后系统会主动读取第一个可启动的设备(由BIOS设置),此时就可以 ...

  6. 鸟哥的linux私房菜——第六章学习(Linux文件与目录管理)

    ******************第六章学习****************** 1.[文件与目录管理] 在所有目录下面都会存在的两个目录,分别是 "." 与 "..& ...

  7. 鸟哥的linux私房菜学习笔记 __ 命令与文件的搜寻

    连续输入两次[tab]按键就能够知道使用者有多少命令可以下达.那你知不知道这些命令的完整档名放在哪里?举例来说,ls 这个常用的命令放在哪里呢? 就透过 which 或 type 来找寻吧! 范例一: ...

  8. 鸟哥的Linux私房菜——第十七章:Linux 账号与身份管理

    视频链接:http://www.bilibili.com/video/av10669732/ 1. Linux 的账号与群组1.1 使用者识别: UID 与 GID1.2 使用者账号:/etc/pas ...

  9. 鸟哥的linux私房菜 - 第三章 主机规划与磁盘分区

    各硬件装置在linux中的文件名 在linux系统中,每个装置都被当成一个档案来对待. 常见的装置与其在linux中的档名: 磁盘分区 磁盘链接的方式与装置文件名的关系 个人计算机常见的磁盘接口有两种 ...

随机推荐

  1. 使用CLRMD时通过Symbol Server找Dac的位置来初始化ClrRuntime

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:使用CLRMD时通过Symbol Server找Dac的位置来初始化ClrRuntime.

  2. sql server 分组统计数据

    说明:group by是sql中对数据表中的数据进行分组的,在select列表中出现的字段必须全部出现在group by 字段中,出现在聚合函数中的字段在group by中可有可无,没有出现在sele ...

  3. oracle7

    管理初始化参数 管理初始化参数(调优的一个重要知识点,凭什么可以对数据库进行调优呢?是因为它可以对数据库的一些参数进行修改修正) 初始化参数用于设置实例或是数据库的特征.oracle9i提供了200多 ...

  4. \n 与 \r 在记事本中的内容表现方式 原创

    总结:[0D,0A]的顺序才可以记事本才可以正常显示回车换行,其他EDITPLUS ,等编缉工具在下面三种情况下都可以换行 原始数据与表现形式     [0D,0A]序列才可以正常显示回车换行 --- ...

  5. 文件IO 练习题

    3.1 当读/写磁盘文件时,本章中描述的函数是否具有缓冲机制?请说明原因. 3.1 所有的磁盘 I/O 都要经过内核的块缓冲区(也称为内核的缓冲区高速缓存),唯一例 外的是对原始磁盘设备的 I/O,但 ...

  6. 1个小时学会ReactiveCocoa基本使用

    来源:朱凯奇 链接:http://www.jianshu.com/p/5d966074741a 1.ReactiveCocoa简介 ReactiveCocoa(简称为RAC),是由Github开源的一 ...

  7. InnoDB还是MyISAM (摘录)

    两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用. 我作为使用MySQL的用户角度出发,Innodb和My ...

  8. android开发之bitmap使用

    bitmap是android中重要的图像处理工具类,通过bitmap可以对图像进行剪切.旋转.缩放等操作,同时还可以指定格式和压缩质量保存图像文件. 一.拿到一个Bitmap对象 查看源码我们知道,B ...

  9. 解决升级windows8.1 Oracle服务被刷新

    1.调用CMD管理员模式,记得,否则你想要执行的东西都调用不了,win8下“窗口键+X”-“命令提示符(管理员) 2.创建oracle10g.11g的监听服务:(%ORACLE_HOME%为oracl ...

  10. 曾经感动过我们的文字 今天是否还有印象?——v1

    ①人最宝贵的东西是生命.生命对人来说只有一次.因此,人的一生应当这样度过:当一个人回首往事时,不因虚度年华而悔恨,也不因碌碌无为而羞愧;这样,在他临死的时候,能够说,我把整个生命和全部精力都献给了人生 ...