当前位置: 首页 > news >正文

7个Linux搜索和过滤命令

1. grep 命令 – 使用条件匹配搜索文本

Grep是处理文本文件的最强大的工具之一。

语法:

grep [options] pattern [files]

一些有用的 grep 选项:

  • i – 忽略条件中的大小写区别
  • R – 递归搜索子目录
  • c – 只打印匹配行数
  • v – 反转匹配,打印不匹配的行
    它搜索与正则表达式匹配的行并打印它们,例如下面命令将搜索 long.txt 文件中的 “linux”一词,忽略大小写敏感性。
grep -i "linux" long.txt
#等同 cat long.txt | grep -i "linux"

您可以使用-c标志计算与给定条件匹配的次数:

grep -c "linux" long.txt
2

2. awk – 条件扫描和处理语言

awk 命令允许根据指定的条件和操作进行更高级的文本处理。它逐行操作,将每行分割成字段。

语法:

awk 'pattern { action }' input-file

例子:

awk '/error/ {print $1}' /var/log/syslog

这将打印任何包含 “error” 的行的第一个字段。awk 还可以使用 NR (行数)和 NF (字段数)等内置变量。

[root@xx]# cat linux.txt 
Linux
Linux
linux1 linux3 linux6 linux8
Linux9
[root@xx]# awk "/lin/ {print NR}" linux.txt 
3
[root@xx]# awk "/lin/ {print NF}" linux.txt 
4

awk 高级功能包括:

  • 字段数学计算
  • 条件语句
  • 用于处理字符串、数字和日期的内置函数
  • 输出格式控制

awk 的功能非常强大,因为它是一种独立的编程语言,作为 Linux 命令,它可以给你很多控制权。详细学习请参考 Linux awk 命令 | 菜鸟教程

3. sed – 用于过滤和转换文本的流编辑器

sed 命令允许过滤和转换文本。它可以执行搜索/替换、删除、移位等操作。不过,与 awk 不同的是,sed 是为按指令逐行编辑而设计的。

语法:

sed options 'commands' input-file

例子:

sed 's/foo/bar/' file.txt

这会将 file.txt 中的 “foo” 替换为 “bar”。

一些有用的 sed 命令:

  • s – 搜索和替换文本
  • /pattern/d – 删除与模式匹配的行
  • 10,20d – 删除第 10-20 行
  • 1,3!d – 删除除 1-3 行以外的所有行 (‘1,3!d’,需单引号,双引号需要反斜杠\转换,因为Bash shell下!字符有特殊意义,被解释为历史命令扩展。)

sed 非常适合批量查找/替换、选择性删除行和其他文本流编辑操作。

sed 's/Linux/linux/' linux.txt > linux.txt2

4. sort – 对文本文件行进行排序

当你处理大量文本或数据,甚至是从其他命令输出的大量内容时,排序是使事情易于管理的好方法。sort 命令将按字母或数字对文本文件的行进行排序。

语法:

sort [options] [file]

有用的 sort 选项:

  • n – 按数字而不是字母排序
  • r – 反转排序顺序
  • k – 根据特定字段或列排序

例子:

sort -n grades.txt

这将对 grades.txt 中的内容进行数字排序。排序便于对文件内容进行排序,使输出或分析更具可读性。

sort -k 是 sort 命令的一个选项,用于指定要排序的字段(列)。

语法格式为:sort -k <起始位置>[,<结束位置>]

其中 <起始位置> 指定了要排序的字段起始位置,<结束位置>(可选)指定了字段的结束位置。字段起始位置和结束位置都是以 1 开始的数字。

以下是一些示例来帮助说明 -k 选项的用法:

  • sort -k 2:按照第二个字段进行排序。
  • sort -k 2,5:按照从第二个字段到第五个字段的范围进行排序。
  • sort -k 3,3:按照第三个字段进行排序。
  • sort -k 2,2n:按照第二个字段的数值大小进行排序。
  • sort -k 2,2nr:按照第二个字段的逆序(从大到小)数值大小进行排序。

通过使用 -k 选项,你可以指定要排序的字段范围,还可以使用额外的选项来控制排序方式(如按照数值大小或逆序排序)。

[root@xx]# cat linux.txt
test 30  
Hello 95  
Linux 85 
[root@xx]# sort -k 2 linux.txt
test 30  
Linux 85 
Hello 95  

5. uniq – 报告或省略重复行

uniq 命令可从输入中过滤重复的相邻行。该命令通常与排序命令一起使用。

语法:

uniq [options] [input]

选项:

  • c – 以出现次数作为唯一行的前缀。
  • d – 只显示重复行,不显示唯一行。

例子:

sort data.txt | uniq

这将删除排序后 data.txt 中的任何重复行。uniq 可让你控制重复文本的过滤。

6. diff – 逐行比较文件

diff 命令逐行比较两个文件并打印差异。它通常用于显示文件版本之间的变化。语法

语法:

diff [options] file1 file2

选项:

  • b – 忽略空白处的更改。
  • B – 在行内显示差异,高亮显示更改。
  • u – 用三行上下文输出差异。
    例子:
diff original.txt updated.txt

这将输出 original.txt 和 updated.txt 之间的不同行。 diff 对于比较文本文件和源代码的修订版本非常有用。

7. wc – 打印行数、字数和字节数

wc (字数统计)命令打印文件中的行数、字数和字节数。

语法:

wc [options] [file]

选项:

  • l – 只打印行计数。
  • w – 只打印字数。
  • c – 仅打印字节数。
    例子:
wc report.txt

该命令将打印 report.txt 中的行数、字数和字节数。

相关文章:

  • Jmeter 性能-监控服务器
  • 多种采购方式下,数智化招标采购系统建设解决方案
  • kube-apiserver参数详解
  • WPF真入门教程26--项目案例--欧姆龙PLC通讯工具
  • 飞天使-k8s知识点10-kubernetes资源对象3-controller
  • ftp安装与配置 云服务器 CentOS7
  • Java_线程通信
  • VCG 网格面片法向量平滑
  • Android Compose——ScrollableTabRow和LazyColumn同步滑动
  • Danswer部署指南
  • 计算机体系结构----缓存一致性/多处理机
  • OceanBase与MySQL兼容性对比
  • Python系列(1):简洁优雅,功能强大的编程语言
  • 《SRE Google 运维解密》笔记
  • 【Spring Cloud】Sentinel流量限流和熔断降级的讲解
  • @angular/forms 源码解析之双向绑定
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • CODING 缺陷管理功能正式开始公测
  • golang中接口赋值与方法集
  • Iterator 和 for...of 循环
  • Java 内存分配及垃圾回收机制初探
  • JavaScript学习总结——原型
  • tweak 支持第三方库
  • 分布式任务队列Celery
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 力扣(LeetCode)357
  • 前端性能优化--懒加载和预加载
  • 容器服务kubernetes弹性伸缩高级用法
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 我们雇佣了一只大猴子...
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​力扣解法汇总946-验证栈序列
  • #if和#ifdef区别
  • (16)Reactor的测试——响应式Spring的道法术器
  • (2020)Java后端开发----(面试题和笔试题)
  • (LeetCode 49)Anagrams
  • (pojstep1.3.1)1017(构造法模拟)
  • (pytorch进阶之路)扩散概率模型
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (接口自动化)Python3操作MySQL数据库
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (七)理解angular中的module和injector,即依赖注入
  • (三十五)大数据实战——Superset可视化平台搭建
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .libPaths()设置包加载目录
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET 反射的使用
  • .NET 解决重复提交问题
  • .net 中viewstate的原理和使用
  • .NetCore项目nginx发布