查找特定的文件
find
语法 find path [options] params
作用:在指定目录下查找文件
find -name "target3.java"
递归查找出当前目录下所有名称为 “target3.java” 的文件,返回路径
find / -name "target3.java"
从根目录递归查找出所有名称为 “target3.java” 的文件,返回路径
find / -name "target*"
从根目录递归查找出所有以 “target” 开头的文件,返回路径
find / -iname "target*"
从根目录递归查找出所有以"target" 开头的文件(不区分文件名大小写),返回路径
可以通过man find
命令查找更多find
的使用说明
检索文件内容
grep
语法:grep [options] pattern file
全称: Global Regluar Expression Print
作用:查找文件里符合条件的字符串
grep "moo" target*
查找出所有target开头的文件里面的包含"moo"的行
grep -o 'engine[[0-9[a-Z]*\]]'
筛选出符合正则表达式的内容
grep -v "grep"
过滤掉包含相关字符串的内容
grep "moo"
如果后面不带文件名,则会等待输入的行里面获取内容。很明显这和管道操作符"|
"很配
管道操作符
|
可将命令连接起来,前一个指令的输出作为后一个指令的输入
find / | grep "target"
达到效果同上面的find / -name "target*"
注意的点:
1、只处理前一个命令正确输出,不处理错误输出
2、右边命令必须能接收标准输入流,否则传递过程中数据会被抛弃
3、常用接收管道输出命令有sed,awk,grep,cut,head,top,less,more,wc,join,sort,split等
结合通配符,组合使用grep命令的筛选和过滤可使得检索文件内容更灵活
grep "moo" target1.java | grep -o 'engine[[0-9[a-Z]*\]]'
ps -ef | grep tomcat | grep -v "grep"
对文件内容做统计
awk
语法:awk [options] ‘cmd’ file
- 一次读取一行文本,按输入分隔符进行切片切成多个组成部分
- 将切片直接保存在内建的变量中,$1,$2…($0表示行的全部)
- 支持对单个片段的判断,支持循环判断,默认分隔符为空格
awk '{print $1,$4}' target2.txt
将target2.txt里面以空格作为分隔符的第1列和第4列输出出来
awk '$1=="tcp" && $2==1{print $0}' target2.txt
将target2.txt里面以空格作为分隔符,第一列等于”tcp
“ 第二列等于 1
的所有列打印出来
awk '$1=="tcp" && $2==1 || NR == 1{print $0}' target2.txt
NR表示行数,添加NR == 1将第一行表头也显示出来
awk -F "," 'print{$0}' test.txt
指定以逗号作为分隔符",
" 查询所有test.txt里面的所有列打印出来(默认是以空格作为分隔符)
grep "moo" target1.java | grep -o 'engine[[0-9[a-Z]*\]]' | awk '{enginearr[$1]++}END{for(i in enginearr)print i "\t" enginearr[i]}'
将得到的grep结果做统计,engine相同的累加,后面再将engine以及engine的次数打印出来
批量替换文档里面的内容
sed
语法:sed [options] ‘sed command’ filename
全名 stream editor,流编辑器
适用于对文本的行内容进行处理
sed 's/^Str/String/' replace.java
替换replace.java里面以Str开头的Str
为String
的字符串后,返回替换后的结果 。此时文件内容并未被替换
sed -i 's/^Str/String/' replace.java
加入-i
后,就会替换文件里面的内容
sed -i 's/\.$/\;/' replace.java
replace.java里面以点号.
结尾的.
替换为分号;
sed -i ‘s/jack/me/’ replace.java
replace.java里面的jack
替换为me
,但是如果一行有两个jack
,仅首次符合条件的被替换
所以如果需要整行所有的jack都被替换,需要后面加上g
sed -i 's/jack/me/g' replace.java
sed -i '/^ */d' replace.java
/d表示删除 ,不是对字符串做操作 不用s开头了
删除replace.java里面以空格开头的行
sed -i '/Integet/d' replace.java
也可以按照内容删除,删除包含Integet的行
还有很多其他用法,比如搜索和移动数据等等。这里仅记录常用的文件操作命令