文章目录
二十六、Linux下shell的文本处理工具
26.1 grep(全局搜索正则表达式)
26.1.1 grep介绍
grep (缩写来自Globally search a Regular Expression and Print)——全局搜索正则表达式,是一种强大的文本搜索工具,它能使用特定模式匹配搜索文本,并默认输出匹配行。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep和fgrep都是grep的扩展,支持更多的re元字符,fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
26.1.2 grep的基本命令
26.1.2.1 grep的格式
- grep的基本格式命令
grep -E=egrep
命令 | 意义 |
---|---|
grep root passwd | 过滤passwd文件中root关键字 |
grep ^root passwd | 过滤passwd文件中以root开头的 |
grep root$ passwd | 过滤passwd文件中以root结尾的 |
grep -i root passwd | 过滤忽略大小写 |
grep -E “<root" passwd | root字符前不能有字符 |
grep -E “root>” passwd | root字符后不能又字符 |
grep -n root passwd | 显示匹配的行所在行的行号 |
grep -A root passwd | 显示过滤行以及下面的几行 |
grep -B root passwd | 显示过滤行以及上,面的几行 |
grep -v | 反向过滤 |
grep -数字 | 显示过滤行以及上下几行 |
- 实践
26.1.2.2 grep 字符数量匹配规则
- 基本命令
命令 | 意义 |
---|---|
^weoopp | 以weoopp开头的 |
weoopp$ | 以weoopp结尾的 |
w…p | 以w开头以p结尾,中间有四个字符 |
…p | 前面有六个字符以p结尾 |
* | 字符出现0到任意次 |
? | 字符出现0到1次 |
+ | 字符出现1到任意次 |
{n} | 字符出现n次 |
{m,n} | 字符出现m到n次 |
{0.n} | 字符出现次数小于等于n次 |
{,n} | 字符出现次数小于等于n次 |
{m,} | 字符出现次数大于等于m次 |
(ee){2} | ee字符串出现两次 |
- 实践
26.1.2.3 grep练习
- 显示系统中能被su命令切换的用户名称
26.2 sed
26.2.1 sed介绍
- 基本介绍
SED(Stream EDitor)是一项Linux指令,功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大
26.2.2 sed基本命令
26.2.2.1 sed对字符处理
- 基本命令
分类 | 命令 | 意义 |
---|---|---|
p;n /显示 | sed -n 5p weoopp | 显示文件第五行 n—不显示模式空间里的内容 |
sed -n 3,5p weoopp | 显示文件三到五行 | |
sed -ne “3p;5p” weoopp | 显示三和五行,e-----表示多条策略 | |
sed -ne ‘5,$p’ weoopp | 显示第五行以及第五行以后的 | |
sed -n ‘/^#/p’ weoopp | 显示以#开头的行 | |
d/ 删除 | sed 5d weoopp | 删除文件第五行 |
sed ‘/^#/d’ weoopp | 删除以#开头的行 | |
sed ‘/UUID/!d’ weoopp | 除了UUID的行都删除 | |
sed -e ‘5,$d’ weoopp | 删除第五行以及第五行以后的行 | |
a/ 添加 | sed -e '$a hello ’ weoopp | 在最后加上hello显示 |
sed -e ‘$a hello\n hi’ weoopp | 显示时换行显示 | |
sed -e ‘/^#/a hello’ weoopp | 在开头为#的行后显示 | |
c/替换 | sed -e '/^#/c hello ’ weoopp | 替换以#开头的行 |
sed '5chello ’ weoopp | 替换第五行 | |
i/插入 | '4ihello ’ weoopp | 插入第四行 |
r/整合文件 | sed ’ 5r text1 ’ weoopp | 将text1整合在weoopp的第五行后 |
w/写入 | sed ’ /^###/w file1’ text2 | 将text2文件以###开头的行导入文件file1 中 |
- n;p 正常显示
- d 删除
- a 添加
- c 替换
- i 插入
- 整合文件 r
- w 写入
26.2.2.2 sed 字符替换
- 基本命令
命令 | 意义 |
---|---|
sed ‘s/w/###/g’ weoopp | 将文件中的w全部替换成### |
sed ‘s/w/###’ weoopp | 将文件中的w全部替换成### |
sed ‘1,5s/w/###/g’ weoopp | 讲一到五行的w替换成### |
sed ‘1s/w/###/g’ weoopp | 将第一行的w替换成### |
sed ‘1s/ w/###/g;5s/ w/###/g’ weoopp | 将第一行和第二行的w替换成### |
sed ‘/lp/,/shutdown/s/w/###/g’ weoopp | 替换lp和shutdown中间的w为### |
sed ‘s///####/g’ weoopp | 将全文的/替换为### \为转义字符 |
sed ‘s@/@####@g’ weoopp | @也可以表示分隔符 |
sed ‘s@/@####@g’ -i weoopp | 将sed处理后的内容保存到weoopp中,可用来修改原文件内容 |
- 实践
26.3 awk
26.3.1 awk介绍
AWK是一种处理文本文件的语言,是一个强大的文本分析工具。
26.3.2 awk 的基本命令
26.32.1 基本命令
- awk的基本命令
命令 | 意义 |
---|---|
awk -F 分隔符 +命令+文件名 | 基本输出 |
awk BEGIN{ }END{ } | 以开始;结果输出为: |
awk ‘{print NR}’ 文件名 | 输出行数 |
awk‘{print NF}’ 文件名 | 输出列数 |
FILENAME | 当前文件名称本身 |
awk ‘{print 字符}’ | 显示字符变量值 |
awk ‘{print “字符”}’ | 显示字符这个字符串 |
awk '/条件1 | 条件2 / print { }’ 文件名 |
awk '/条件1/ | |
awk ‘/条件1/&&/条件2 / print { }’ 文件名 | 与满足 |
‘{print $1}’ | 显示第一列 |
‘{print $0}’ | 显示全部列 |
$6~ | 第六列 |
$6!~ | 除了第六列以外 |
- 实践
26.3.2.2 练习
- 显示系统中能用su切换的并且用户家目录不在/home下的用户以及数量