Linux文件查找/内容搜索命令

Linux文件查找/内容搜索命令

Linux的文件检索或者日志文件关键字搜索应该是很常用的工作场景, 这里汇总常见的命令用法.

find


# 只查找特定文件
find . -type f -name '*.py'

# 只查找特定文件
find . -type f -name '*.py'
# 在所有目录查找特定文件名
find / -type f -name httpd.conf
# 忽略大小写
find . -iname
# 忽略目录
find / -xdev -type f -size +100M 
find / -size +100M -not -path '/proc/*'

查找大文件


# 最常用 
find . -type f -size +100M -exec ls -lh {} \; | awk '{ print $8 ": " $5 }' 
# 支持文件名含空格 
find $1 -type f -exec stat --format '%Y :%y %n' {} \; | sort -nr | cut -d: -f2- | head 
# 执行更快 
find $1 -type f | xargs stat --format '%Y :%y %n' | sort -nr | cut -d: -f2- | head 

统计代码行数


find . -name ‘.py’ | xargs wc -l
(find ./ -name '.py' -print0 | xargs -0 cat)|wc -l
# 注: -print0 | xargs -0 == -X 规避特殊字符

grep/egrep

grep [OPTIONS] PATTERN [FILE…] grep [OPTIONS] “text string to search” directory-path


-w    # 匹配单词
-i     # 忽略大小写
-color  
-R, -r    #recursively, 递归的查找子文件夹
-n            # 显示行号
-a, --text    # 把二进制文件当作text处理
--exclude: --exclude=*.o
--include: --include=*.{c,h}  # 只检索匹配的文件
--exclude-dir: --exclude-dir={dir1,dir2,*.dst}
--include-dir:   
-o   # 只显示匹配行
-l  # 只显示匹配文件名
|    # 匹配多个

显示上下文

-B num # 显示匹配前多少行
-A num # 显示匹配后多少行
# 示例
grep -B 3 -A 2 foo README.txt

# 如果显示相同行的上下文,可使用
-C num
# 或者
-n

查找某时间区间


grep "31/Mar/2002:19:3[1-5]" logfile
egrep '^[^ ]+ (0[89]|1[0-9]|2[012]):'

# awk的方式
awk -v from="12:52:33" -v to "12:59:33" '$1>=from && $1<=to' foo.log
awk '$0 >= "13/05/13 07:50" && $0 <= "13/05/23 01:58"'
# sed的方式
sed -rne '/<timestamp>/,/<timestamp>/ p' <file>
# 示例
sed -n '/Feb 23 13:55/,/Feb 23 14:00/p' /var/log/mail.log
sed -n '/Feb 21 23:08:19/,/Feb 21 23:08:23/p' daemon.log

awk/sed


awk 'NR>=10&&NR<=20' in.log > out.log
sed -n '100,1000 p' in.log > out.log

sort/uniq/cut/tr

sort

  • -n 以数字而非字母排序
  • -h 更可读的方式显示
  • -r 倒序排列
  • -k 5 第五列
  • -t, –field-separator=SEP # 指定分隔符
  • -s, –stable # 稳定排序,用于多列排序

uniq

  • -u 只显示唯一行
  • -d 只显示重复行
  • -c 显示重复次数

cut

  • -d’:’ 以冒号为分隔符,默认分隔符为tab
  • -f1-4 选取1~4列

tr 转换/替换/删除字符


tr -d 'input-characters' # 删除字符
tr -s '\n' # 把重复字符压缩为一个,s代表squeeze
tr "[:lower:]" "[:upper:]" &lt; filename # 转换大小写
tr -cd "[:print:]" &lt; filename # 取消非打印字符, c代表complement

扩展

xargs

xargs [options] [command] 构造参数列表然后执行. 将标准输入或管道转换为命令行的参数,如果省略command则默认使用echo. 通常用作替代find的-exec参数,因为xargs如果出错不会停止执行.

常用选项:

  • -0 ,–null 以空字符为结束符, 和find -print0结合使用 -I_ 以_为替换字符
  • -L max-lines 最多个非空行执行一次
  • -I replace-str 替换字符串,以换行符为分割符

-exec

系统包查找

yum


# 查找包含某命令的包
yum provides mpstat
# 查询安装包名
rpm -qpi ***.rpm 

资源

发表评论

电子邮件地址不会被公开。 必填项已用*标注