文章目录
背景
本文主要记录了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…($0表示行的全部)
- 支持对单个切片的判断,支持循环判断,默认分隔符为空格
根据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