Linux常用shell指令学习——find、grep、管道符、awk、sed

背景

本文主要记录了Linux中比较常见的几个指令,包括find(提供文件路径查找的功能)、grep(对文件内容进行检索)、管道符 " | "的使用、awk切分列的使用以及sed批量替换的功能。

Linux的体系结构

体系结构主要分为用户态(用户上层活动)和内核态
内核:本质上是一段管理计算机硬件设备的程序
系统调用:内核访问的接口,是一种不能再简化的操作
公共函数库:系统调用的组合拳
Shell:命令解释器,可编程

如何查找特定的文件

find

语法:find path [options] params
作用:在指定目录下查找文件,如果没有指定任何参数,那么find指令默认是查找当前目录下的所有子目录与文件,并将其展示

  • find ~ -name “markus.java” :精确查找文件
  • find ~ -name “markus*” :模糊查找文件
  • find ~ -iname “markus” :不区分大小写去查文件
  • 如果想看find指令的参数详情,可以使用 man find来阅读

检索文件内容

grep

语法:grep [options] pattern file
全称:Global Regular Expression Print
作用:查找文件里符合条件的字符串

grep 在不指定文件的时候,是等待标准输入来进行输出的。并且grep指令只展示文件中符合条件的某一行,并不展示所有

管道操作符 |

可将指令连接起来,前一个指令的输出作为后一个指令的输入
在这里插入图片描述

使用管道符需要注意的点

只处理前一个命令正确输出,不处理错误输出
右边命令必须要能够接收标准输入流,否则传递过程中数据会被抛弃
sed,awk,grep,cut,head,top,less,more,wc,join,sort,split等可以使用管道符

在线上日志中 快速定位到我们想要的内容

总结

过滤日志中有partial[true]的信息

grep ‘partial[true]’ bac-plat-al-data.info.log

按照正则表达式进行匹配相应的行

grep -o ‘engine[[0-9a-z]*]’

按照正则表达式进行过滤,去掉这些行

grep -v ‘grep’

对文件内容做统计

awk

语法:awk [options] ‘cmd’ file
作用:

  1. 一次读取一行文本,按输入分隔符进行切片,切成多个组成部分;
  2. 将切片直接保存在内建的变量中,$1,$2…($0表示行的全部)
  3. 支持对单个切片的判断,支持循环判断,默认分隔符为空格

根据grep得到我们需要看到的错误信息,通过awk进行统计,得出每项engine有多少次出错,并打印出来
grep ‘partial[true]’ bac-plat-al-data.info.log | grep -o ‘engine’[[0-9a-z]*]’ | awk ‘{enginearr[$1]++}END{for(i in enginearr)print i “\t” enginearr[i]}’

总结

在nestat.txt文档打印出第一列&第四列的信息

awk ‘{print $1,$4}’ nestat.txt

在nestat.txt文档中查出第一列是tcp并且第二列数值为1的信息($0表示打印全部)

awk ‘$1==“tcp” && $2==1{print $0}’ netstat.txt

统计内容信息,这个需要通过使用管道符提供输入信息

awk ‘{enginearr[$1]++}END{for(i in enginearr)print i “\t” enginearr[i]}’

awk默认采用空格作为分隔符,如果我们想用其他的符号作为分隔符的话,可以指定参数,例如以逗号分割 -F “,”

awk -F “,” ‘{print $2}’ test.txt

批量替换文本内容

sed

语法:sed [option] ‘sed command’ filename
全名stream editor,流编辑器
适合用于对文本的行内容进行处理

总结

用String替换掉文件里以Str开头的信息,并展示在终端(原文件内容保持不变)

sed ‘s/^Str/String/’ replace.java

用String替换掉文件里以Str开头的信息,并保存在原文件中

sed -i ‘s/^Str/String/’ replace.java

把文件中以 . 结尾的用 ; 替代,并保存在原文件中

sed -i ‘s/.$/;/’ replace.java

把文件中第一个Jack替换为me

sed -i ‘s/Jack/me/’ replace.java

把文件中所有的Jack替换为me

sed -i ‘s/Jack/me/g’ replace.java

把文件中空格删除

sed -i ‘/^ *$/d’ replace.java

把文件中Integer所在行删掉

sed -i ‘/Integer/d’ replace.java

学习来源

https://linux265.com/course/linux-commands.html

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值