前言
目录
如何在脚本快速高效的处理文本,删除替换,添加等,这是需要我们掌握各文本工具的应用
一、正则表达式概述
正则表达式,又称规则表达式。(英语:Regular Expression),在代码中常简写为 regexregexp 或 RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
常用工具有:grep sed awk egrep
正则表达式---通常用于判断语句中,用来检查某一字符串是否满足某一格式
正则表达式是由普通字符与元字符组成
普通字符包括大小写字母、数字、标点符号及一些其他符号
元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式
LINUX 中常用的有两种正则表达式引擎
基础正则表达式:BRE
扩展正则表达式: ERE
二、基础正则表达式常见元字符
\ | 转义符,将特殊字符进行转义 |
^ | 匹配行首,^则是匹配字符串的开始 |
$ | 匹配行尾,$则是匹配字符串的结尾 |
\{n\} | 匹配前面的子表达式n次 |
\{n,\} | 匹配前面的子表达式不少于n次 |
\{n,m\ | 匹配前面的子表达式n到m次 |
三、grep工具
-a | 将 binary 文件以 text 文件的方式搜寻数据 |
-c | 将 binary 文件以 text 文件的方式搜寻数据 |
-i | 忽略大小写的不同,所以大小写视为相同 |
-n | 顺便输出行号 |
-v | 反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行 |
例:grep -c "the" web.sh ##统计the字符总行数
grep -i "the" web.sh ##不区分大小写查找the所有的行
四、sed工具
sed工具概述
sed是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed 也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于 Shell 脚本中,用以完成各种自动化处理任务。
常用选项
-e | 指定要执行的命令,只有一个编辑命令时可省略 |
-f | 用指定的脚本文件来处理输入的文本文件 |
-n | 只输出处理后的行,读入时不显示 |
-i | 直编辑文本文件 |
常用操作
a | 插入,在当前行后面插入一行或多行 |
c | 将选定行替换成指定内容 |
d | 删除指定的行 |
i | 插入,在当前行上面插入一行或多行 |
p | 打印 |
s | 字串替换,格式: “行范围s/原字符串/新字符串/g” |
y | 字符转换 |
迁移符合条件的文本
使用sed命令迁移常用一下参数
H | 复制到剪贴板 |
g,G | 将剪贴板数据覆盖 |
w | 保存文件 |
r | 读取指定文件 |
a | 追加指定内容 |
例子
sed -n '/yum/='pass.txt
##查找pass.txt带yum的行
sed -n '/yum/p' pass.txt
##打印pass.txt带yum的行
sed -n '3,5' pass.txt
##打印3到5行
sed '/the/w out.file' test.txt
##将test.txt中所有的the的行存到out.file
sed 's/o/a/g' abc.txt
##将abc.txt中所有的o替换成a
五、awk工具
awk工具概述
功能强大的编辑工具
无交互的情况下实现复杂的文本操作
工作原理
逐行读取文本,默认以空格为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
命令格式
awk 选项 ‘模式条件操作’ 文件1 文件2
awk -f 文件 脚本文件1 文件2
awk内置变量
FS | 指定每行文本的字段分隔符,默认为空格或制表位 |
NF | 当前处理的行的字段个数 |
NR | 当前处理的行的行号 |
$0 | 当前处理的行的整行内容 |
$n | 当前处理行的第 n 个字段(第 n 列) |
例子
awk -F ':' '{print $1}' passwd
##打印passwd所有第一列内容
awk 'NR==1,NR==3{print}' text.txt
##打印test.txt文件第一行到第三行的内容
awk 'NR==1|NR==3{print}' test.txt
##打印第一列和第三行的内容
awk -F ":" '$7~"/bash"{print $1.$7}' /etc/passwd
##打印第七列包含bash的第一列和第七列
总结
学会使用正则表达式与各种文本工具才能写出更加优秀快捷的脚本。