8. 文件行数的统计和关键字的搜索

1. 从文件的后500行打印,如有更新,实时展示

tail -fn 500 file.txt
  • -f 选项:

作用:表示“跟随”(follow),即实时监控文件的变化。

功能:当文件有新内容追加时(例如日志文件不断写入新日志),tail 会持续显示新内容。

适用场景:常用于监控日志文件或其他动态更新的文件。

tail -f file.txt 运行后,tail 会显示文件的最后 10 行(默认),并持续监控文件的变化

  • -n 选项:

作用:指定显示文件的最后多少行内容。

2. 查询文件的后500行是否出现关键字1

tail -fn 500 file.txt | grep "关键字1"

3. 查询关键字在文件中出现的行数

grep -c "关键字" file.txt

输出:error 在 logfile.txt 中出现的行数(即出现行的数量)。

4. 查找关键字出现的具体行

grep -n "关键字" file.txt

输出:warning 在 logfile.txt 中出现的行号及具体内容

5. 查询关键字在文件中出现的行数

grep -o "关键字" | wc -l

6. 忽略大小写查找关键字

grep -i -o "关键字" | wc -l

7. 递归查找目录及子目录下文件出现关键字的行数

grep -r -c "关键字" /var/log/

如:grep -r -c "error" /var/log/
输出:error 在 /var/log/ 目录及其子目录中每个文件出现的行数。

8. 结合正则表达式查找

grep -c "^2023" file.txt

输出:以 2023 开头的行数。

9. 查关键字在文件中第一次出现的行数

① grep

grep -n "关键字" file.txt | head -1

输出: 行号:行内容

只输出行号:

grep -n "关键字" file.txt | head -1 | cut -d:-f1

② awk

awk '/关键字/{print NR; exit}' file.txt

NR 是 awk 的内置变量,表示当前行号
找到关键字第一次出现的行号后直接退出

③ sed

sed -n '/关键字/{=;q}' file.txt

= 表示打印当前行号,q 表示退出
找到关键字第一次出现的行号后退出。

总结:

  • grep:适合快速查找,结合 head 和 cut 可以提取行号。
  • awk:适合更复杂的文本处理,直接输出行号。
  • sed:简洁高效,适合单行命令

10. 查询文件行数

wc -l file.txt

输出如:
  100 logfile.txt
100是行数,logfile.txt是文件名称

 

如果只需要行数(不显示文件名),使用以下命令:

① wc -l

wc -l < file.txt

或:

cat logfile.txt | wc -l

② awk

awk 'END {print NR}' file.txt

NR 是 awk 的内置变量,表示文件的总行数。

③ sed

sed -n '$=' file.txt

示例:sed -n '$=' logfile.txt

④ 使用 nl 命令

nl file.txt | tail -1

nl 命令可以为文件添加行号,结合 tail 可以查看总行数

⑤ grep和cat结合

grep -c '' file.txt

总结:

  • wc -l:最常用,简单高效。
  • awk:适合脚本中使用。
  • sed:简洁,适合单行命令。
  • nl:适合需要查看行号的情况。

推荐使用 wc -l,因为它是最直接和高效的方式!

11. 在文本中找出关键词1第一次出现之后的文档有没有出现关键词2

使用 awk 或 sed 结合 grep 来实现这个需求

① awk

awk '/关键词1/{flag=1} flag && /关键词2/{print "关键词2 出现在关键词1 之后"; exit}' file.txt

命令解析:

  •  /关键词1/{flag=1}:

当找到 "关键词1" 时,设置一个标志 flag=1,表示 "关键词1" 已经出现。

  •  flag && /关键词2/:

如果 flag=1(即 "关键词1" 已经出现),并且找到 "关键词2",则执行后面的操作。

  •  {print "关键词2 出现在关键词1 之后"; exit}:

打印提示信息 "关键词2 出现在关键词1 之后",然后退出命令。

  •  file.txt:

这是你要搜索的文本文件。

示例:
  file.txt 内容如下:
  这是第一行
  这是关键词1
  这是第二行
  这是关键词2
  这是第三行

命令:awk '/关键词1/{flag=1} flag && /关键词2/{print "关键词2 出现在关键词1 之后"; exit}' file.txt

输出:
  关键词2 出现在关键词1 之后
  如果没有找到关键词2
  如果 "关键词1" 之后没有出现 "关键词2",则命令不会有任何输出。

② sed

sed -n '/关键词1/,${/关键词2/{p;q}}' file.txt
  • /关键词1/,${...}:从 "关键词1" 开始到文件末尾。
  •  关键词2/{p;q}:如果找到 "关键词2",则打印并退出。
posted @   紫蕈  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示