#日常工作常用

            
一、greo,sed,awk功能比对用途

grepsedawk
功能搜索,不修改数据单行编辑数据按分隔符(如逗号、空格)拆分文本字段,计算
用途过滤日志,参数批量修改文本数据报表生成,提取文件信息并导出

二、grep命令--文本搜索

1.常见命令

#筛选java进程
ps -ef|grep java

#筛选文件夹下的ip引用
grep "192.168.1.2" ./* -nir

2.更多参数

-i 忽略大小写

-v 打印不匹配的

-w 匹配整个单词

-n 显示匹配行数

-r 递归查找指定目录下所有文件

-a 强制文本扫描二进制文件

-c 等同于--color 高亮展示

-o 打印关键词

-e 多个选择匹配,也可以管道符分开

-q 是否匹配到,echo $? 0匹配成功,1匹配失败

-E 使用扩展正则表达式 等同于egrep(可以让grep支持“|”,“+”,“?”,“()”)

-C 50 前后50行

-A 50 后50行(after)

-B 50 前50行(before)

#使用案列
#忽略大小写,error前后30行打印text.log
grep -nai 'error' -C30 text.log 

#精确匹配 -w
#只打印lsj的内容
grep -w 'lsj' text.log 

#关键词 -o
#打印相关lsj的行,但只有lsj
grep -o "lsj" text.log

#打印error和info的日志 必须加-E,不然不识别
grep -E "error|info" log.log

排除注释的行以及空行(很常用)
grep -Ev '#|^$' text.conf



三、sed命令

 1.命令格式:

sed [options] [sed-commands] [input-file]
sed  [选项]     [sed命令]      [输入文件]

#选项:
-i 修改文件

-e 多点编辑

-n 打印处理的行

#命令:

-s 取代

-g 全局查找替换

-a 下一行插入

-d 删除

-p 打印 

2.实际应用

#aa替换为bb 

sed -i 's/aa/bb/g' text.txt

##查找1-10行数的文件 
sed -n '1,10p' text.txt

##查找aaa相关的行数
sed -n '/aaa/p' text.txt

#查找.结尾的行数(\是转译)
sed -n '/\.$/p' text.txt

#先把text.txt的1-3行删除,再把bb改成cc
sed -e '1,3d' -e 's/bb/cc/' text.txt


四、awk命令

1.命令格式

awk options 'pattern {action}' file

参数说明:

  • options:是一些选项,用于控制 awk 的行为。
  • pattern:是用于匹配输入数据的模式。如果省略,则 awk 将对所有行进行操作。
  • {action}:是在匹配到模式的行上执行的动作。如果省略,则默认动作是打印整行

options 常用参数说明:

  • -F:指定分隔符,默认使用空格进行分隔
  • -V:赋值一个用户定义变量
  • BEGIN{ 这里面放的是执行前的语句 }
  • END {这里面放的是处理完所有的行后要执行的语句 }
  • {这里面放的是处理每一行时要执行的语句}

2.常用案例

awk 后一定一定一定要单引号

$0	输出所有列
$1	输出第一列
$2  输出第二列
$N  输出第N列
$NF 输出最后一列
NR 第几行
##打印第二行 第一列的信息
awk 'NR==2{print $1}' aa.log


## 打印第一列的信息 
awk '{print $1}' aa.log

## 过滤第一列大于2的信息
awk '$1>2' aa.log

#过滤第一列大于2并且第二列等于'lsj'的行
awk '$1>2 && $2=="lsj"' aa.log

#打印当前系统的总用户
awk 'END {print "当前系统总用户:",NR}' /etc/passwd

#按照想要的列表打印磁盘容量
##%-30s 间隔10,并换行
df -h | awk 'BEGIN {printf "%-10s %-10s %-10s\n", "文件系统", "大小", "使用率"} NR>1 {printf "%-30s %-10s %-10s\n", $1, $2, $5}'

高级案例

给一个学生成绩信息,打印成表格

$ cat score.txt
Marry   78 84 77
Jack    66 78 45
Tom     48 77 71
Mike    87 97 95
Bob     40 57 62

结果:

五、正则表达式(三剑客及常用到的)

^ 表示搜索以什么开头。
$ 表示搜索以什么结尾。
^$表示空行,不是空格。
.代表且只能代表任意一个字符。
\转义字符
*重复0个或多个前面的一个字符。不代表所有
.*匹配所有的字符。
[a-z]匹配字符集合内任意一个字符
[^a]在括号里面^表示非,即不包含a或b或c。
{n.m}重复n到m次


参考资料:

https://www.runoob.com/linux/linux-comm-awk.html

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐