简介
Linux 操作文本的三大利器分别是 grep、sed 、awk,简称三剑客。
大师兄 awk:最擅长取列;二师兄 sed:最擅长取行;三师兄 grep:最擅长过滤。
正则表达式
元字符 | 功能 | 说明 |
---|---|---|
^ | 匹配行首 | 表示以某个字符开头 |
$ | 匹配行尾 | 表示以某个字符结尾 |
^$ | 空行 | 表示空行 |
. | 匹配任意单个字符,包括 0 次 | 表示匹配一个非换行符的任意字符 |
* | 匹配 0 个或多个字符 | 表示可重复的任意多个字符 |
[ ] | 匹配指定范围内的任意单个字符 | 表示过滤中括弧内的任意单个字符 |
[^] | 匹配不在指定范围内的字符 | 表示排除指定范围内的字符 |
.* | 匹配任意长度任意字符, | 不包括 0 次 表示任意多个字符 |
… | 匹配子串 | 表示匹配子串 |
& | 搜索字符用来替换其他字符 | 表示搜索的字符来替换替他字符 |
\< | 匹配单词的开始 | 表示单词的开始,其后面的任意字符必须作为单词的首部出现 |
\> | 配单词的结束 | 表示单词的结束,其前面的任意字符必须作为单词的尾部出现 |
x{m} | 出现次数,至少 m 次 | 表示统计字符 x 的出现次数,至少 n 次 |
x{m,n} | 出现次数,至少 m 次,不多于 n 次 | 表示统计字符 x 的出现次数,在 m 和 n 之间 |
\? | 匹 符 1 次或 0 次 | 表示统计前面的字符出现 1 次或 0 次 |
*** 三位师兄闪亮登场啦 ***
大师兄 – AWK
awk 是对文本进行格式化的工具,适合处理比较复杂的格式处理。
有多个版本: 1、new awk: nawk ;2、gawk, awk
awk 命令格式:
awk [options] ‘script’ file1 file2, …
awk [options] ‘PATTERN {acticon}’ file1 file2, …
格式说明:
pattern部分决定动作语句何时触发及触发事件:BEGIN、END
action 对数据进行处理,放在{}内指明:print、printf
最常用的是 print,默认以空白字符分隔
$0 代表整行,$1 代表第 1 段, 2 代表第 2 段,以此类推, 2 代表第 2 段,以此类推, 2代表第2段,以此类推,NF 代表最后一个字段,多个字段直接用逗号隔开
awk ‘{print $1, $2}’ xxx.log
打印操作支持拼接打印,如:awk ‘{print “first” $1, $2}’ xxx.log
4. options 参数:输入分隔符,默认以空白字符分隔,通过 -F 选项来执行分隔符
awk -F ‘#’ ‘{print $1,$2}’ test
输出分隔符,默认情况下输出分隔符是空格,使用内置变量 OFS 来设定输出分隔符,需要加上 -v 选项
awk -v OFS=“–>” ‘{print $1,$2}’ test
5. awk 变量
FS:输入字段分隔符,默认空白字符,一般需要加 -F
OFS:输出字段分隔符,默认是空格,一般需要加 -v
NF:分隔后的字段数量
NR:当前行的行号
6. pattern 模式:模式是条件,符合条件的行, awk 才会进行处理
关系运算模式:awk -F ‘#’ ‘NF==5 {print $1}’ test
如果行的分段数量为5 的话,进行打印操作,其他的类似,如 NF>2,NF<4,$1==1234 等都是判断条件。
awk -F ‘#’ ‘NF>=4 && NF<=5 {print $1}’ test
二师兄 – sed
sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
sed 命令格式:
sed [options]… ‘script’ inputfile
选项
- -n:不输出模式空间内容到屏幕,即不自动打印
- -e:多点编辑
- -f /PATH/SCRIPT_FILE:从指定文件中读取编辑脚本
- -r:支持使用扩展正则表达式
- -i:直接编辑文件
- -i.bak:备份文件并原处编辑
script 地址定界
不给地址:对全文进行处理
单地址:
#:指定的行; $:最后一行
/pattern/:被此处模式所能够匹配到的每一行
编辑命令
d 删除模式空间匹配的行,并立即启用下一轮循环
p 显示符合条件的行,追加到默认输出之后
a []text1 在指定行后面追加文本,支持使用\n实现多行追加
i []text 在行前面插入文本
c []text 替换行为单行或多行文本
w /path/somefile 保存模式匹配的行至指定文件
r /path/somefile 读取指定文件的文本至模式空间中匹配到的行后
= 为模式空间中的行打印行号
! 模式空间中匹配行取反处理
s///:查找替换,支持使用其它分隔符,s@@@,s###
替换标记:
g 行内全局替换
p 显示替换成功的行
w /PATH/TO/SOMEFILE 将替换成功的行保存至文件中
实例说明:
sed -n 2p test 打印第 2 行内容
sed -n 2,5p test 打印第 2–5 行内容
mac 上执行上述命令会报错 sed: 1: "test": undefined label 'est.txt'
解决方案:增加一个备份的追加名【sed -i '.bak' 's/a/v/g' test】
原因:mac强制要求备份,否则报错
当然可以不使用其他备份名字,只是用'',就可以只保留一份
sed -i '' 's/a/v/g' test
三师兄 – grep
grep 强大的文本搜索工具,根据模式搜索文本,并将符合模式的文本行显示出来。
gerp 命令格式:
grep 【option】 pattern 【file】
option:
-
-i:忽略字符大小写
-
-n:显示匹配的行号
-
-v:显示没有被匹配的行
-
–color:将匹配的字符以高亮颜色标记出来
-
-c:统计匹配的行数
-
-o:仅显示匹配到的字符串
-
-q:静默模式,不输出任何信息
-
-e:实现多个选项间的逻辑 or 关系
-
-v:反转查找
-
-w:匹配整个单词
-
-A:after ,显示后行
-
-B:before ,显示前行
-
-C:context,显示前后行 使用grep -E命令过滤eg:如passwd文件中root字符前没有字符的行、root字符后没有字符的行
-
-E:相当于 egrep,即 grep -E = egrep
实例说明:
grep -i ‘b’ test 在文件 test 中查找字符 b
grep -q ‘abc’ test 静默执行。不会输出任何信息,如果命令运行成功返回0,失败则返回非0值。一般用于条件测试
grep -n ‘v’ test 查找包含字符 v 的行数
grep -nv ‘v’ test 查找不包含字符 v 的行数
grep -n v$ test 查找以 v 结尾的行
grep -v ‘v’ test 反向查找
文章转载自:https://blog.csdn.net/lanse_rain/article/details/105969155
如有侵权,请联系作者