0%

Linux中文件相关的查找、检索、统计和替换

Linux中查找特定文件

1
2
3
4
5
6
7
8
# 在指定目录下查找文件
find path [options] params
# 精确查找文件
find ~ -name "target.cpp"
# 模糊查找
find ~ -name "target*"
# 不区分大小写查找
find ~ -iname "target*"

Linux检索文件内容

1
2
3
4
5
6
7
8
9
# 查找文件中符合条件的字符串
grep [options] pattern file
# 查找target.txt文件中的haha字符串
grep "haha" target.txt
# 利用管道操作符 | 和grep查找home路径下的target.txt文件
find ~ | grep "target.txt"
# grep 选项:
grep -o '[0-9a-Z]*' # 只匹配pattern中的正则表达式(任意个由数字和字母组成的字符串)
grep -v 'target' # 过滤掉目标字符串

Linux对文件内容做统计

1
2
3
4
5
6
7
8
9
10
11
12
# awk 一次读取一行文本,按照输入分隔符进行分片,切分成多个组成部分
# 将切片直接保存在内建的变量之中,$1, $2, ... ($0表示行的全部)
# 支持对单个切片的判断,支持循环判断,默认分隔符为空格
awk [options] 'cmd' file
# 打印test.txt的第一列以及第四列(可以是多个文件,中间以空格分隔)
awk '{print $1,$4}' test.txt
# 打印test.txt的第一行以及(第一列为tcp,第二列为1)的行,其中NR表示当前行数
awk '($1=="tcp" && $2==1) || NR==1 {print $0}' test.txt
# 使用-F选项指定分隔符,默认为空格
awk -F "," '{print $2}' test.txt
# 统计文件中第一列某一字段出现的次数,END表示扫描完之后执行的代码块
awk '{targetnum[$1]++} END{for(i in targetnum) print i "\t" targetnum[i]}'

Linux批量替换文本内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# sed 全名stream editor,流编辑器
# 适合对文本的行内容进行处理
# 默认不对文件直接修改,只是将结果输出到终端
sed [options] 'sed cmd' filename
# 使用-i选项,将修改同步到文件,修改文件中以Str开头(^)的字符串为String
sed -i 's/^Str/String/' target.txt
# 修改文件中以.结尾($)为以分号(;)结尾
sed -i 's/\.$/\;/' target.txt
# 将文件中的Jack改为me,加g为全文替换,不加的话只替换每一行的第一个Jack
sed -i 's/Jack/me/g' target.txt
# 删除空行,注意^后有空格,d表示删除
sed -i '/^ *$/d' target.txt
# 删除Integer所在的行
sed -i '/Integer/d' target.txt