查找特定的文件
find
find path [options] params
作用:在指定目录下查找文件
比如:
find -name a.txt
本目录下搜索a.txt。
find / -name ls
全局搜索文件ls。精确查找。
find ~ -name "*.txt"
在用户目录下搜索以.txt结尾的文件。模糊查找。
find ~ -iname b*
找到本目录下以b开头的文件,不区分大小写查找
更多使用说明可以 man find
检索文件内容
grep
grep hello a.*
查找以a.开头的包含hello的文件。输出对应那一行。
grep hello
对接下来的输入产生反应,如果输入行包括hello这个字符串,就再显示一次。
管道操作符 |
可将指令连接起来,前一个指令的输出作为后一个指令的输入。
例如:
find ~ | grep a.txt
作用和find ~ -name a.txt
一样,是查找用户目录下名为a.txt的文件。
ps -ef | grep bash | grep -v grep
-v过滤, 查询bash进程,过滤掉带有字段grep的。
grep 'open\[true\]' hello.log
显示该文件中带有 open[true] 的行
grep -o 'name\[[0-9a-z]*\]'
筛选出文件中带有name[******]的行
注意
- 只处理前一个命令正确的输出,不处理错误输出
- 右边命令必须能够接收标准输入流,否则传递过程中数据会被抛弃。
对文件内容做统计
awk
语法:awk [options] ‘cmd’ file
- 一次读取一行文本,按输入分隔符进行切片,切片分成多个组成部分
- 将切片直接保存在内建的变量中,$1,$2… ($0表示行的全部)
例如:
awk '{print $1, $3}' b.txt
显示文本中第一列和第三列的内容。
awk '$2=="20" && $3=="女"{print $1, $3}' b.txt
满足条件时打印出第一行和第三行的内容
awk '($2=="20" && $3=="女") || NR==1 {print $1, $3}' b.txt
带上行头
awk -F "," '{print $2}' b.txt
-F以逗号作为分隔符输出第二列
批量替换文本内容
sed
语法:sed [option] 'sed command' filename
全名stream editor,流编辑器
适合用于对文本的行内容进行处理
sed -i 's/^张/李/' b.txt
把张换成李,-i是为了在文件中存入改动
sed -i 's/\.$/;/' b.txt
找到以.结尾的行,并将.替换为;
sed -i 's/,/;/g' b.txt
-g对整行的内容进行替换,不加只替换每一行的第一个
sed -i '/^ *$/d' b.txt
-d删除文件中空行