编辑
2023-03-02
Awk|grep|sed
00

目录

2022-11-14
grep
正则以^开头的
正则以$结尾的
正则^$空行
正则.(点)任意一个字符
正则*前一个字符连续出现0次或0次以上
\转义字符:去除原有的特殊含义
.表示表示所有字符或\ 连续初恋的时候,表现出尽可能的贪婪匹配
[]中括号匹配一次匹配任何括号内的字符a或b或c
sed
2022-11-15
awk

2022-11-14

grep

Global search REgular expression and Pint out the line

正则以^开头的

grep '^linux' test.log

正则以$结尾的

grep 'linux$' test.log

正则^$空行

表示空行没有任何内容,空格也是

正则.(点)任意一个字符

shell
grep '.' test.log

正则*前一个字符连续出现0次或0次以上

\转义字符:去除原有的特殊含义

.*表示表示所有字符或* 连续初恋的时候,表现出尽可能的贪婪匹配

shell
grep -C '^.*error' test.log

[]中括号匹配一次匹配任何括号内的字符a或b或c

shell
[a-z] [A-Z] [0-9] grep '[a-zA-Z0-9]' test.log

[^abc]取排除abc的内容

shell
grep '[^abc]' test.log
grep[options][pattern]files
命令参数模式文件
-i ignorecase忽略字符大小写
-o 仅显示匹配到的字符串本身
-v 显示不能被匹配到的行
-E 后面可以跟正则表达式
-n 显示匹配的行与行号

sed

stream Editor字符流编辑器

sed [options] [sed内置命令字符] [输入文件]

options:-n取消sed的默认输出,通常与p命令一起用

​ -i直接将修改结果写入文件,不用-i sed修改的是内存数据

​ -e多次编辑,用多个-e

​ -r正则扩展

sed内置命令字符:

a append,对文本追加,在文末添加一行或多行

d deletet删除匹配行

i insert插入文本,在指定行插入一行或多行

p print打印匹配行的内容

s/正则/替换内容/g 匹配正则内容,然后替换内容,结尾g代表全局匹配

sed匹配范围

范围解释
空地址全文处理
但地址指定文件某一行
/pattern/被pattern匹配的每一行
10,20第十行到第二十行
10,+5第10行向下5行
步长1~2从第一行开始步长为2匹配1,3,5,7,9,11行
2~2从第二行开始步长为2匹配2,4,6,8,10,12行
shell
sed '2,3p' test.log -n#打印文件第2,3行数据 sed '/error/p' test.log -n#打印含error的行 sed '/error/d' test.log -i#删除含error的行并写入源文本 sed 's/error/info/g' test.log -i#将error的行替换为info并写入文本 sed -e 's/error/info/g' -e 's/critical/error/g' test.log -i #将error换成info将critical替换成error并写入源文本 sed '2a system runnig good!' test.log -i #在第二行后面追加system runnig good!并写入源文本 sed '3i system out of memory' test.log -i #在第三行前面加入system out of memory并写入源文本 sed '4a infection \ninfection' test.log -i #在第4行后面追加两行infection并写入源文本 ifconfig eth0 | sed -e '2s/^inet.*//' -e '2s/net.*$//p' -n #-e的多次使用 ifconfig eth0 | sed '2p' -n | sed 's/^.*inet//' | sed 's/net.*$//'#获取网卡0的ip地址 Linux命令中如何去掉某文件中的空行? 使用sed命令可以去掉某文件中的空行: sed '/^$/d' filename

2022-11-15

awk

awk options pattern {action} file

shell
awk '{print $2}' test.log#打印第二列的内容 awk '{print $0}' test.log#打印完整的内容 awk '{print $NF}' test.log#打印最后一列 awk '{print $NF-1}' test.log#打印倒数第二列 awk '{print $n}' test.log#打印第n列的内容 awk '{print $2,$3}' test.log#打印第二列和第三列的内容 awk '{print "第一列:"$2,”第二列:"$3}' test.log#打印自定义前缀第二列和第三列的内容

options参数

-F指定分割字段符

-v定义或修改一个awk内部的变量

-f从脚本文件中读取awk命令

shell
awk -v FS=':' '{print$2}' test.log #以:为分隔符打印第2列的内容
awk '{print$1}' test.log | sort | uniq -c | sort -r
ini
root@4f08afd9a913:/pythonAutomationFramework/logs# sort test.log | uniq -c | sort -r 26 2023-02-27 03:33:56 INFO [{'title': '漠河舞厅 (烟嗓女生版)', 'author': '娜依', 'url': 'https://api.i-meto.com/meting/api?...... 14 2023-02-27 03:33:57 INFO [{'title': '漠河舞厅 (烟嗓女生版)', 'author': '娜依', 'url': 'https://api.i-meto.com/meting/api?...... 6 2023-02-27 03:34:05 INFO {'code': 200, 'msg': '域名正常'} 5 2023-02-27 03:34:06 INFO {'code': 200, 'msg': '域名正常'} 5 2023-02-27 03:34:04 INFO {'code': 200, 'msg': '域名正常'} 4 2023-02-27 03:34:07 INFO {'code': 200, 'msg': '域名正常'} 2 2023-02-27 03:34:12 INFO {'code': 200, 'msg': '域名正常'} 2 2023-02-27 03:34:09 INFO {'code': 200, 'msg': '域名正常'} 2 2023-02-27 03:34:08 INFO {'code': 200, 'msg': '域名正常'} 1 2023-02-27 03:34:10 INFO {'code': 200, 'msg': '域名正常'} 1 2023-02-27 03:34:02 INFO {'name': 'morpheus', 'job': 'morpheus', 'id''morpheus', 'id': '3', 'createdAt': '2023-02-27T03:33:55.142Z'} 1 2023-02-27 03:33:55 INFO {'name': 'morpheus', 'job': 'morpheus', 'id': '894', 'createdAt': '2023-02-27T03:33:52.968Z'}