7个Linux搜索和过滤命令

dafenqi
2024-01-09 / 0 评论 / 17 阅读 / 正在检测是否收录...

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 中的行数、字数和字节数。

0

评论 (0)

取消