shell中的文本处理

1.grep

grep 文本过滤命令
grep -E = egrep #扩展正则表达式
grep #正则表达式
grep 命令是一种强大的文本搜索工具 , 根据用户指定的“模式”对目标文本进行匹配检查 , 打印匹配到的行–由正则表达式或者字符及基本文本字符所编写的过滤条件。
grep 的格式
grep 匹配条件 处理文件
例如
grep root passwd
在这里插入图片描述
grep ^root passwd #root为开头
在这里插入图片描述
grep root$ passwd #root为结尾
在这里插入图片描述
grep -i root passwd #忽略大小写
shell中的文本处理_第1张图片
grep -E “root|ROOT” passwd
shell中的文本处理_第2张图片
-v 显示除按命令搜索到的其他信息
shell中的文本处理_第3张图片
-n 显示行号
在这里插入图片描述
-nX 显示上下X行的信息,并标注行号
shell中的文本处理_第4张图片
-X 显示上下X行的信息
shell中的文本处理_第5张图片
-AX 显示下X行的信息
shell中的文本处理_第6张图片
-BX 显示上X行的信息
shell中的文本处理_第7张图片
grep 中字符的匹配次数设定
* 字符出现 [0- 任意次 ]
shell中的文本处理_第8张图片
? 字符出现 [0-1 次 ]
在这里插入图片描述
 + 字符出现 [1- 任意次 ]
在这里插入图片描述
{n} 字符出现 [n 次 ]
shell中的文本处理_第9张图片
{m,n} 字符出现 [ 最少出现 m 次,最多出现 n 次 ]
在这里插入图片描述
{0,n} 字符出现 [0-n 次 ]
shell中的文本处理_第10张图片
{m,} 字符出现 [ 至少 m 次 ]
shell中的文本处理_第11张图片
(xy){n}xy 关键字出现 [n 次 ]
在这里插入图片描述

  • 关键字之间匹配任意字符
    shell中的文本处理_第12张图片
    grep 中字符的匹配位置设定
    ^ 关键字 #关键字在开头
    $ 关键字 #关键字在结尾
    < 关键字 #防止前几个字节贪婪
    shell中的文本处理_第13张图片
    关键字 > #防止后几个字节贪婪
    shell中的文本处理_第14张图片
    < 关键字 > #防止贪婪
    shell中的文本处理_第15张图片

2.sed

sed 行编辑器
用来操作纯 ASCII 码的文本
处理时 , 把当 前处理的行存储在临时缓冲区中 , 称为“模式空间” (pattern space) 可以指定仅仅处理哪些行:sed 符合模式条件的处理 不符合条件的不予处理。处理完成之后把缓冲区的内容送往屏幕,接着处理下一行 , 这样不断重复 , 直到文件末尾。
sed 对字符的处理
p 显示
sed -n 3p fstab #显示第3行的内容
在这里插入图片描述
sed -n ‘/#/p’ fstab #显示带有#的行的信息
shell中的文本处理_第16张图片
sed -n ‘/#/!p’ fstab #显示除了带有#的行的其他行信息
在这里插入图片描述
sed -n ‘/UUID$/p’ fstab #显示以UUID结尾的行的信息
sed -n ‘/^UUID/p’ fstab #显示以UUID开头的行的信息
sed -n ‘2,6p’ fstab #显示2到6行的信息
shell中的文本处理_第17张图片
sed -n ‘2,6!p’ fstab #显示除了2到6行的其他行信息
在这里插入图片描述
sed -n ‘2p;6p’ fstab #显示第2行和第6行的信息
在这里插入图片描述
d 删除
sed ‘/^UUID/d’ /etc/fstab #显示除了以UUID开头的其他行的信息
shell中的文本处理_第18张图片
sed ‘/^#/d’ /etc/fstab #显示除了以#开头的其他行的信息
在这里插入图片描述
sed ‘/^ $/d’/etc/fstab #显示除了以 $开头的其他行的信息
sed ‘1,4d’/etc/fstab #显示除了第1行到第4行的其他行的信息
sed ‘1d;4d’/etc/fstab #显示除了第1行和第4行的其他行的信息
shell中的文本处理_第19张图片
sed ‘/^UUID/!d’ /etc/fstab #显示以UUID开头的行的信息
shell中的文本处理_第20张图片
a 添加
sed ‘/^UUID/ahello westos’ /etc/fstab #在以UUID开头的行的下一行添加hello westos
shell中的文本处理_第21张图片
sed ‘/^UUID/ahello\nwestos’ /etc/fstab #在以UUID开头的行的下两行添加hello和westos
shell中的文本处理_第22张图片
i 插入
sed ‘/^UUID/ihello\nwestos’ /etc/fstab #在以UUID开头的行的上两行插入hello和westos
shell中的文本处理_第23张图片
c 替换
sed ‘/^UUID/chello westos’ /etc/fstab #将以UUID开头的行替换成hello westos
shell中的文本处理_第24张图片
w 写入
sed ‘/^UUID/w /tmp/fstab.txt’ /etc/fstab #显示fstab的内容并将以UUID开头的行写入w后的文件中
shell中的文本处理_第25张图片
sed -n ‘/^UUID/w /tmp/fstab.txt’ /etc/fstab ##不显示fstab的内容,且将以UUID开头的行写入w后的文件中
在这里插入图片描述
sed ‘/^UUID/=’/etc/fstab #在以UUID开头的行的上一行加行号
shell中的文本处理_第26张图片
sed ‘6r /etc/issue’ /etc/fstab #将/etc/issue中的信息加在第6行的后面
shell中的文本处理_第27张图片

sed的其他用法
sed -n ‘/^UUID/=’ fstab #显示以UUID开头的行的行号
shell中的文本处理_第28张图片
sed -n -e ‘/^UUID/p’ -e ‘/ ^UUID/=’ fstab #显示以UUID开头的行的信息并加上行号
shell中的文本处理_第29张图片
sed -e ‘s/brown/green/;s/dog/cat/’ data #-e和;的作用一样,都是将两行命令一起执行,将data中的brown换成green,dog换成cat
sed -f rulesfile file #对file执行rulefile中写的命令
sed ‘s/#//g’/etc/fstab #将文件中的#换成空,并显示
shell中的文本处理_第30张图片
sed ‘s@/@##@g’/etc/fstab #将文件中的/换成##,并显示
shell中的文本处理_第31张图片
sed ‘s///#/’/etc/fstab #将每一行的第1个/换成#,并显示
shell中的文本处理_第32张图片
sed ‘s///#/g/’/etc/fstab #将所有的/换成#,并显示
shell中的文本处理_第33张图片
sed ‘G’ data #在文件中的每一行后再加一个空行
shell中的文本处理_第34张图片
sed ’ $!G’ data #在文件中的每一行后再加一个空行,最后一行不加
shell中的文本处理_第35张图片
sed ‘=’ data | sed ‘s/\n/ /’ #在每一行的上一行添加一个空行,且显示本行的行号
shell中的文本处理_第36张图片
sed ‘=’ data | sed ‘N; s/\n/ /’ #在每一行之前加上行号,并显示;N:读取本行时,一共读取两行
shell中的文本处理_第37张图片
sed -n ’ $p’ data #显示文件的最后一行
在这里插入图片描述

3.awk

awk 报告生成器
awk 处理机制 :awk 会逐行处理文本 , 支持在处理第一行之前做一些准备工作 , 以及在处理完最后一行做一些总结性质的工作 , 在命令格式上分别体现如下 :
BEGIN{}: 读入第一行文本之前执行 , 一般用来初始化操作
{}: 逐行处理 , 逐行读入文本执行相应的处理 , 是最常见的编辑指令块
END{}: 处理完最后一行文本之后执行 , 一般用来输出处理结果
awk 基本用法
linux 上面默认使用 gawk
awk ‘{print FILENAME}’ passwd #在每一行显示文件名字
shell中的文本处理_第38张图片
awk ‘{print 第 “NR” 行 , 有 “NF” 列 }’ #显示行数和列数
shell中的文本处理_第39张图片
awk ‘BEGIN{print NAME}’ #在显示第一行加上NAME
awk ‘END{print WESTOS}’ #在显示最后一行加上WESTOS
awk -F : ‘BEGIN{print NAME}{print $1}END{WESTOS}’ #在显示第一行加上NAME,在显示最后一行加上WESTOS,以:为分隔符显示第一列
awk ‘/bash $/’ #显示以bash为结尾的行的信息
awk -F : ‘/bash $/{print $1}’ #以:为分隔符显示以bash为结尾的行的第一列
显示除了以nologin为结尾的行的其他行的第一列:
shell中的文本处理_第40张图片
awk ‘BEGIN{a=34;print a+12}’ #初始值为34,显示34+12的值
awk -F : ‘/^ro/{print}’ /etc/passwd #显示以ro为开头的行的信息
awk -F : ‘/^ [a-d]/{print $1,$6}’ passwd.txt #显示以abcd为开头的行的以:为分隔符的第一列和第六列
awk -F : ‘/^a|nologin $/{print $1,$7}’ passwd.txt #显示以abcd为开头,以nologin为结尾的行的以:为分隔符的第一列和第七列
awk -F : ‘$6~/bin $/{print $1,$6}’ #显示以:为分隔符的第六列是bin的行的第一列和第六列
awk -F : ‘$7!~/nologin $/{print $1,$7}’ passwd.txt #显示以:为分隔符的第七列不是nologin的行的第一列和第七列
用命令输出可以登录系统但家目录不在home下的用户的个数:
awk -F : ‘BEGIN{a=0}/bash $/&&$6!~/home/{a++}END{print a}’ /etc/passwd
在这里插入图片描述

你可能感兴趣的:(shell中的文本处理)