文章目录
一、正则表达式
- 正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑,计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本,许多程序设计语言都支持利用正则表达式进行字符串操作,例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的,正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen
二、grep文本过滤命令
1、grep是什么
- grep的工作方式:在一个或多个文件中搜索字符串模板,如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名,搜索的结果被送到屏幕,grep可用于shell脚本,如果模板搜索成功返回0,不成功返回1,搜索文件不存在返回2,我们可以利用返回值做一些自动化的文本处理工作
2、grep 的格式
| 命令 | 含义 |
|---|---|
| grep root passwd | 搜索全文中的root |
| grep ^root passwd | 搜索全文中以root开头的 |
| grep root$ passwd | 搜索全文中以root结尾的 |
| grep -i root passwd | 忽略大小写 |
| grep -E “root/ROOT” passwd | 同时匹配多个条件 |
| grep “root$” passwd -n | 过滤出以root结尾的,且排序 |
| grep “root$” passwd -v | 过滤出以root结尾的,且排序 |
| grep “root$” passwd -B1 | 过滤出以root结尾的行及其前一行 |
| grep “root$” passwd -B1 | 过滤出以root结尾的行及其前一行 |
| grep “root$” passwd -A1 | 过滤出以root结尾的行及其后一行 |
| grep “root$” passwd -2 | 过滤出以root结尾的行及其前后2行 |
(1)grep root passwd 搜索全文中的root,grep属于贪婪模式的搜索和匹配,只要行中有root出现,它就会打印匹配的行,除非指定什么开头,什么结尾

(2)
grep -E “root|ROOT” passwd = grep root passwd | grep ROOT 加-E可以一次性加两个条件,不加-E就过滤两次

(3)grep -Ei “root” passwd -i 表示忽略大小写过滤

(4)grep -Ei “^root” passwd 过滤出以root开头的

(5)grep -Ei " root$" passwd 过滤出以root结尾的

(6)grep -Ei “^root |root$” passwd 过滤出以root开头和结尾的

(7) **grep -Ei “^root |root$” passwd -v**过滤出不以root开头和结尾的,-v表示取反

(7) grep -Ei “^root |root$” passwd -v |grep root 过滤出root居中的

(8)grep -Ei “^root |root$” passwd -n 过滤出以root开头和结尾的,且排序

(9)grep ROOT passwd -B1 过滤出ROOT所在行及其前一行

(10)grep ROOT passwd -A1 过滤出ROOT所在行及其后一行

(11)grep ROOT passwd -2 过滤出ROOT所在行及其前后2行

(11)grep ROOT passwd -1 过滤出ROOT所在行及其前后1行

(12)grep ROOT passwd -n1 过滤出ROOT所在行及其前后1行,且标出行号

| 命令 | 含义 |
|---|---|
| ^root | 打印以westos开头的行 |
| root$ | 打印以westos结尾的行 |
| ‘w…s’ | 打印w和s中间包括四个字符的行 |
| ‘w…’ | 打印w开头,后面四个字符的行 |
| ‘…s’ | 打印s结尾,前面四个字符的行 |

| 命令 | 含义 |
|---|---|
| *字符出现 | [0- 任意次 ] |
| ?字符出现 | [0-1 次 ] |
| +字符出现 | [1- 任意次 ] |
| {n}字符出现 | [n 次 ] |
| {m,n} 字符出现 | [ 最少出现 m 次,最多出现 n 次 ] |
| {0,n}字符出现 | [0-n 次 ] |
| {m,}字符出现 | [ 至少 m 次 ] |
| (xy){n}xy | 关键字出现 [n 次 ] |
| .* | 关键字之间匹配任意字符 |







三、sed行编辑器(stream editor)
1、sed命令
- SED是一项Linux指令,功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强,sed用来操作纯 ASCII 码的文本 处理时 , 把当前处理的行存储在临时缓冲区中 , 称为“模式空间” (pattern space) ,可以指定仅仅处理哪些行 sed 符合模式条件的处理,不符合条件的不予处理,处理完成之后把缓冲区的内容送往屏幕接着处理下一行 ,这样不断重复 , 直到文件末尾,原来的内容是在磁盘当中放着,现在用sed命令处理的时候将内容掉入内存的一个地方用户处理,这个处理空间也叫模式空间。
2、Sed 命令格式
- 调用 sed 命令有两种形式
sed [options] ‘command’ file(s)
sed [options] -f scriptfile file(s)
3、sed 对字符的处理
| 符号 | 含义 |
|---|---|
| p | 显示 |
| d | 删除 |
| a | 添加 |
| c | 替换 |
| w | 写入 |
| i | 插入 |
(1)p 模式操作(按照要求显示行)
| 命令 | 含义 |
|---|---|
| sed -n ‘/:/p’ fstab | 显示有:号的行 |
| sed -n ‘/UUID$/p’ fstab | 显示UUID结尾的行 |
| sed -n ‘/^UUID/p’ fstab | 显示UUID开头的行 |
| sed -n ‘2,6p’ fstab | 显示第2行和第6行 |
| sed -n ‘2,6!p’ fstab | 显示除了第2行和第6行的其余行 |


(2)d 模式操作(按照要求删除行)
| 命令 | 含义 |
|---|---|
| sed ‘/^UUID/d’ /etc/fstab | 删除UUID开头的行并将其余行显示出来 |
| sed ‘/^#/d’ /etc/fstab | 删除#开头的行并将其余行显示出来 |
| sed ‘/^$/d’/etc/fstab | 删除空行并将其余行显示出来 |
| sed ‘1,4d’/etc/fstab | 删除1和4行并将其余行显示出来 |
| sed –n ‘/^UUID/!d’ /etc/fstab | -n 不显示模式空间,删除除了UUID开头的行并将UUID行显示出来 |



(3)a 模式操作(按照要求添加)
| 命令 | 含义 |
|---|---|
| sed ‘/^UUID/a \hello’ /etc/fstab | 在UUID行添加hello |
| sed '/^UUID/a \hello\nranran '/etc/fstab | 在UUID行添加 hello 换行ranran |



(4)c 模式操作(按照要求改变行)
sed ‘/^UUID/c\hello ranran’ /etc/fstab | 替换所有UUID开头的行为hello ranran

(5) w 模式操作(按照要求写入行)
| 命令 | 含义 |
|---|
sed ‘/^UUID/w /tmp/fstab.txt’ /etc/fstab
sed -n’/^UUID/w /tmp/fstab.txt’ /etc/fstab
sed ‘/^UUID/=’/etc/fstab
sed ‘6r /etc/issue’ /etc/fstab




(6)i 模式操作(插入)
sed ‘/^UUID/i\hello\nranran’ /etc/fstab | 在UUID开头的行前插入hello ranran

(7)sed 的其他用法
| 命令 | 含义 |
|---|---|
| sed -n ‘/^UUID/=’ fstab | 显示UUID开头的行是第几行 |
| sed -n -e ‘/^UUID/p’ -e ‘/^ UUID/=’ fstab | 显示UUID开头的行并标号 |
| sed -e ‘s/brown/green/; s/dog/cat/’ data | 替换brown为green且替换dog为cat |
| sed -f rulesfile file | 贵者 |
| sed ‘s/^//#/’/etc/fstab | 替换所有/开头的列为# |
| sed ‘s@^/@#@g’/etc/fstab | @也可为分隔符 |
| sed ‘s///#/g/’/etc/fstab | 替换所有/为# |
| sed ‘G’ data | |
| sed ‘$!G’ data | |
| “sed ‘=’ data | sed ‘N; s/\n/ /’” |
| sed -n ‘$p’ data |










四、awk(报告生成器)
1、什么是awk(报告生成器)
- awk处理机制:awk会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行做一些总结性质的工作,然后将结果展现给用户
- 在命令格式上分别体现如下 :BEGIN{}:读入第一行文本之前执行,一般用来初始化操作;{}:逐行处理,逐行读入文本执行相应的处理,是最常见的编辑指令;END{}:处理完最后一行文本之后执行 , 一般用来输出处理
- AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识,awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命令可以查看正在应用的awk的来源(ls -l /bin/awk )
2、awk的用法
(1)awk -F(指定分隔符) : ‘{print $1}’ passwd 打印passwd文件的以:为分隔符的第一列字符

(2)awk -F : ‘{print $1$2}’ passwd 打印第一列和第二列,不出现:分隔符

(3)awk -F : ‘print $2’ passwd 打印第二列

(4)awk -F : ‘BEGIN{print “linux”}{print $2}’ passwd 打印第二列,并且在最前面加上linux

(5)awk -F : ‘BEGIN{n=1}{print $2,n}’ passwd 在第二列后面 均写上1

(6)awk -F : ‘BEGIN{n=1}{print $2,n++}’ passwd 打印第二列,并且编号

(7)awk -F : ‘BEGIN{n=1}{print n++,$1}’ 打印第1列,并且编号

(8)awk -F : ‘BEGIN{n=1}{print n++,$1}END{print “over”}’ passwd 在后面写上over

(9)awk -F : ‘BEGIN{n=1}{print n++,$1}END{print NR}’ passwd 在结尾输出行数

(10)awk -F : ‘BEGIN{n=1}{print n++,$1}END{print NF}’ passwd 在结尾输出列数

(11)awk ‘/bash/{print}’ passwd 输出包含bash的行的第一个字符

(12)awk -F : ‘NR=3{print $1}’ passwd 第三行的第一个

(13)awk -F : ‘NR>=4&&NR<=6{print}’ passwd 456行

(14)awk -F : 'NR4||NR6{print}’ passwd 4和6行

(15)awk ‘{print FILENAME}’ passwd 输出文件名字

(16)awk ‘{print $0}’ passwd 输出行

(17)awk ‘BEGIN{a=34;print a+12}’ 输出a+12的值

(18)awk ‘/[a-d]/{print}’ /etc/passwd 输出不是以a到d开头的所有的行

(19)awk ‘/^r|bash$/{print}’ /etc/passwd 输出以r开头或者以bash结尾的行

(20)awk ‘/^r/&&/bash$/{print}’ /etc/passwd 输出以r开头且以bash结尾的行

(21)awk ‘/^r/||/bash$/{print}’ /etc/passwd 输出以r开头或者以bash结尾的行

(22)awk -F : ‘
6
/
b
i
n
6~/bin
6 /bin/{print}’ /etc/passwd 打印第六列以bin结尾的行

(23)awk -F : ‘KaTeX parse error: Expected 'EOF', got '\<' at position 4: 6~/\̲<̲bin/{print}’ /etc/passwd 打印第六列含有bin的行

(24)awk -F : ‘
6
!
/
b
i
n
6!~/bin
6! /bin/{print}’ /etc/passwd 第六列不是以bin结尾的行

(25)==awk -F : ‘KaTeX parse error: Expected 'EOF', got '\<' at position 5: 6!~/\̲<̲bin/{print}’ /etc/passwd == 打印第六列不含bin的行

本文介绍了Linux中用于文本处理的三剑客:grep、sed和awk。grep是一个文本过滤命令,能根据指定的规则在文件中查找字符串。sed是一个行编辑器,用于在文本流中进行模式匹配和替换操作。awk是一个报告生成器,能处理和生成报告。文章详细阐述了这三个工具的使用方法和实例。
1618

被折叠的 条评论
为什么被折叠?



