find命令
find [目录(在这个指定目录中查找)] -name “[目标文件名称]”
- find ~ -name “target.java” 精确查找
- find ~ -name “target*” 模糊查找,找到以target开头的文件
- find ~ -iname “target*” 不区分文件名大小写的查找文件
- man find :关于更多find指令的使用说明
检索文件
查找文件里符合条件的字符串
grep “haha” target* 从文件名以target开头的文件中查找带有haha字符串的行,然后输出
如果指定了需要查找的字符串后没有指定从哪个文件中查找,就会等待从用户输入的内容当中查找指定的字符串,如果没有找到,就没有反应,如果找到就返回拥有目标字符串的行。
管道操作符 |
可将指令连接起来,处理前一个指令的正确的标准输入
例如: find ~ | grep “target” 这一句的作用就是首先查出用户目录下的所有文件和文件夹作为输出,给后面的grep 进行条件匹配
需要注意的点:
- 只处理前一个命令的正确输出,不处理错误输出
- 右面的命令必须能够接受标准输入流,否则传递过程中数据会被抛弃
- 常用来接受数据的命令有:sed, awk, cut, head, top, less, , more, wc, join, sort, split等。
grep ‘partial\[true\]’ haha.log(文件名) 这样的方式可以找出文件中partial为true的行。如果觉得张扬输出的内容优点多,乱,还可以删选的
grep ‘partial\[true\]’ haha.log | grep -o ‘engine\[[0-9a-z]*\]’ :这样的一个筛选后就会输出文件中partial的[]为true的,而且筛选罗列出每个partial为true的引擎号。
grep -v ‘指定过滤不要的内容’
统计文件内容
语法 awk [options] ‘cmd’ file
[1]$n 是当前行的按照指定域分隔符(默认是空格或[TAB]]键)分割后的第n个字段,比如n为1 表示第1个字段,n为2表示第2个字段
[2]$0 则是记录了执行过程中当前行的文本内容
[3]NF 每一行($0)拥有的字段总数
[4]NR从awk执行以后,按照记录分隔符读取的数据次数,默认的记录分隔符为换行符,就是默认读取的数据行数。
[5]FNR 表示当前所处理的文本内的"第几行"数据
[6]FS 目前的域分割符号,可以通过FS字段指定文本的域分割符
[7]OFS 输出字段的分割符(默认是一个空格)
[8]ORS 输出的记录分割符(默认是一个换行)
[9]ARGIND 命令行中处理的当前文件的位置(从1开始)
[10]ARGC 命令行参数的数目
[11]ARGV 命令行参数的数组
- 一次读取一行文本,按输入分隔符进行切片,切成多个组成部分
- 将切片保存在内建的变量当中,$1, $2, $3. … ($0表示行的全部)
- 支持对单个切片的判断,支持循环判断。默认分隔符为空格
awk ‘{print $1,$4}’ netstat.txt
$1当中保存的是切片1的内容,$2当中保存的是切片4的内容
awk ‘$1==”tcp” && $2==1{print $0}’ netstat.txt
输出 所有 切片1当中值为tcp的,并且切片2当中值为1的行;
awk ‘($1==”tcp” && $2==1) && NR==1 {print $0}’ nststat.txt
带表头的输出数据
awk 默认使用的是空格进行分割的,也可以指定分割符。
awk -F “,” ‘{print $2}’ test.txt : 指定使用,号进行分割。
和grep组合使用进行统计
grep ‘partial\[true\]’ haha.log | grep -o ‘engine\[[0-9a-z]*\]’ | awk ‘{enginearr[$1]++}END{for(i in enginearr) print i “\t” enginearr[i]}’
enginearr[$1]++:新建一个数组,用引擎的名字来标志数组的下标,只要是遇到相同的引擎,也就是下标一样,相对应的值就++。
END:扫描结束后需要什么操作;
一跟操作相关就要用到{}
{for(i in enginearr) print i “\t” enginearr[i]}
执行结束后遍历enginearr, print i打印下标(记录的引擎名字),“\t”换行符,enginearr[i]位置处所对应的值,也就是名字相同的引擎名字有多少,出现了几次。
很适合处理格式化的数据。
批量替换文本内容
sed 指令
语法: sed [option] ‘sed command’ filename
- 流编辑器 stream editor
- 擅长使用正则表达式对行进行处理
sed ‘s/^Str/String/’ aa.java(被操作文件名)
s:表示进行字符串的操作
^ : 以什么开头 ^Str,以Str开头
后面的/String就是替换成什么
sed ‘s/^Str/String/’ aa.java这样的一个操作后只是将修改后的结果输出到终端,文件并没有修改,sed -i ‘s/^Str/String/’ aa.java 执行后就将文件修改了
sed -i ‘s/\.$/\;/’ replace.java :将每一行末尾的 . 替换成 ;
\. : . 是特殊字符,需要转义
$ : 表示以什么结尾
\; : ; 也是特殊字符,需要转义
这样执行完后,每一行当中首次找到符合条件的字符串是可以替换的,但是之后的就不会替换了
sed -i ‘s/\.$/\;/g’ replace.java ,在第三个/后加个g就可以实现全文替换。
sed -i ‘/^ *&/d’ replace.java : 表达式中^和*之间有一个空格,表示空行,这一段表示删除所有空行,
sed -i ‘/Integer/d’ replace.java : 表示删除包含Integer的行