Linux 下如何检索文件内容

张贤 2020年03月09日 86次浏览

管道操作符:|

可以将指令连接起来,前一个指令的输出作为后一个指令的输入
find ~ | grep "test" 的作用是在当前目录以及子目录中查找文件名包含 test 的文件以及文件夹,与 find ~ -name "test" 作用相同。


使用管道符注意的要点: - 只能处理前一个命令的正确输出,不能处理错误输出(在)

  • 右边命令必须能够处理标准输入流,否则数据在传递过程中会被抛弃(在下图中,echo 指令不能接收输入,因此不能用于管道符之后)


  • 可以用在管道符后面接收标准输入的命令有:sed、awk、grep、cur、head、top、less、more、wc、join、sort、split。

grep

grep 全称是 Global Regular Expression Print

  • grep 可以在文件里查询对应字符串所出现的行,第一个参数表示要查找的内容(需要用引号括起来),第二个参数表示文件名(在哪个文件查找),其中文件名默认支持正则表达式。

在上图的 nginx 的 `access.log` 日志中,想要筛选出使用 `Windows` 系统的行,可以使用`grep "Windows" access.log`。

- 可以通过 -o 选项 选出符合正则表达式的内容。如果想在 nginx 的 access.log 日志里面选出所有的访问时间,如下图。

那么可以使用`grep -o "\[[a-zA-Z0-9/:+ ]*\]" access.log`,其中`[]`在正则表达式中需要使用`\[\]`转义,`[a-zA-Z0-9/:+ ]*`表示大小写字母和`/:+ `字符出现 0 次或者多次。

- 使用 -v 选项过滤包含相关字符串的内容 在使用`ps -ef | grep "nginx"` 查看特定进程的时候,由于`ps -ef | grep "nginx"`本身也会被认为是一个进程列出来。因此可以再使用管道符和 grep -v 过滤掉本次命令。

ps -ef | grep "nginx" | grep -v "grep"