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

LInux grep sed awk 命令详解

grep 命令

grep命令是一个非常强大的文本搜索工具,可以搜索文本文件中的特定文本内容并过滤输出。它支持单个文件搜索,也支持多个文件搜索。grep命令有很多选项和参数,可以帮助我们进行精确的搜索。下面是grep命令的详细介绍:

grep命令的基本语法格式为:

grep [选项] 搜索内容 文件名

其中,选项是用于设置搜索规则的参数,搜索内容是要搜索的文本,文件名是要进行搜索的文件名。如果没有指定文件名,则默认从标准输入中读取数据。

以下是常见的选项:

  • -i:忽略大小写差异;
  • -v:输出不包含搜索内容的行;
  • -c:统计搜索内容在文件中出现的次数;
  • -n:每行输出行号;
  • -r:递归搜索指定目录及其子目录下的所有文件;
  • -w:只匹配整个单词,不匹配部分单词;
  • -A:显示匹配行及其后面指定行数的文本;
  • -B:显示匹配行及其前面指定行数的文本;
  • -C:显示匹配行及其前后的指定行数的文本;

以下是常见的示例:

  1. 搜索单个文件中的文本

如果要在一个文件中查找指定的文本,可以使用grep命令的基本语法格式。

例如,在文件my_file.txt中查找包含"hello"的行:

grep "hello" my_file.txt
  1. 搜索多个文件中的文本

grep命令支持在多个文件中搜索指定的文本。如果要在多个文件中搜索,只需要将要搜索的文件名作为参数提供即可。

例如,在当前目录下所有的txt文件中搜索"hello":

grep "hello" *.txt
  1. 忽略大小写进行搜索

使用-i选项可以忽略搜索时大小写的不同。例如,在文件my_file.txt中查找"hello"和"Hello"都会被搜索到。

grep -i "hello" my_file.txt
  1. 显示匹配文本所在的行号

使用-n选项可以让grep命令显示匹配文本所在的行号。例如,在文件my_file.txt中查找"hello",并在输出中显示行号:

grep -n "hello" my_file.txt
  1. 显示不包含搜索内容的行

通过-v选项,可以让grep命令只输出不包含搜索内容的行。例如,在文件my_file.txt中查找不包含"hello"的行:

grep -v "hello" my_file.txt
  1. 递归搜索文件夹及其子文件夹

通过-r选项可以递归搜索指定文件夹及其子文件夹中的所有文件。例如,在文件夹/my_folder和子文件夹中查找"hello":

grep -r "hello" /my_folder/
  1. 显示匹配行及其上下文

使用-A、-B或-C选项可以将匹配行及其前后几行文本一起显示出来。例如,在文件my_file.txt中查找包含"hello"的行及其后2行:

grep -A 2 "hello" my_file.txt

以上是grep命令的基本用法和一些常见示例,使用grep命令可以快速准确地搜索文本内容,提高我们的工作效率。

sed 命令

sed命令是一种流编辑器,主要用于对文本进行编辑和替换操作,可以实现单行、多行模式匹配、替换等多种操作。它可以从一个或多个文件中读取输入,对文本内容应用一个操作集,然后输出结果。

sed命令的基本语法格式为:

sed [选项] 'command' file(s)

其中,选项和command是可选的,file(s)是需要处理的文件。如果没有指定文件,则默认处理标准输入。

常见的选项:

  • -n:只输出修改后的行。
  • -i:原文件直接修改。
  • -e:支持多个命令。

常见的命令:

  1. 替换命令(s)

替换命令用于将匹配模式替换为指定字符串。它的语法格式为:

s/匹配模式/替换字符串/

例如,将所有匹配到的"apple"替换为"orange":

sed 's/apple/orange/' file.txt

除了字符/可以作为分隔符,还可以使用其他字符作为分隔符,例如#、|等符号。

  1. 删除命令(d)

删除命令用于删除匹配到的行或者指定的范围。它的语法格式为:

d

例如,删除所有含有"apple"的行:

sed '/apple/d' file.txt
  1. 打印命令(p)

打印命令用于将符合指定匹配模式的行打印到标准输出。它的语法格式为:

p

例如,查找所有包含"apple"的行并打印出来:

sed -n '/apple/p' file.txt

上面的-n选项可以禁用默认输出,只输出经过修改后的内容。

  1. 替换多个匹配模式

如果需要替换多个匹配模式,可以使用分号(;)或换行符将多个替换命令组合起来,例如:

sed 's/apple/orange/;s/banana/grape/' file.txt

上面的例子中,将匹配到的"apple"全部替换为"orange",将匹配到的"banana"全部替换为"grape"。

  1. 条件语句

可以使用条件语句来指定各种替换和操作的规则。条件语句的格式为:

/模式1/ command1
/模式2/ command2
/模式3/ command3

例如,将文件中匹配到的一行多个空格压缩为一个空格:

sed 's/  */ /g' file.txt

其中,2个中括号中的空格表示至少出现1次以上,g表示全局查找并替换。

  1. 保存结果

如果需要将修改后的结果保存到指定的文件中,可以使用重定向符号(>)将结果输出到一个新文件中:

sed 's/apple/orange/' file.txt > new_file.txt

上面的命令会将file.txt文件中所有的"apple"字符串替换为"orange",并将结果保存到new_file.txt文件中。

以上是sed命令的一些基本用法和常见命令的示例,通过对sed命令的学习,可以提高文本处理的效率。需要注意的是,由于sed命令的功能非常强大,使用不当可能会对文件造成不可逆的影响,因此在使用sed命令时一定要小心。

awk 命令

awk是一种用于文本处理的命令行工具,它支持对文本的分析、过滤和格式化。awk命令的名字来源于其创始人的缩写:Alfred Aho、Peter Weinberger和Brian Kernighan。awk命令的主要功能是在数据文件中查找和处理文本,可分行处理或按记录处理。awk命令支持基本算术、条件判断、循环语句、内置函数等,提供了一个强大的语言框架,可以编写复杂的脚本。

awk命令的基本语法如下:

awk options 'pattern { actions }' file

其中,options表示选项;pattern表示正则表达式模式,如果匹配到就执行后面的actions命令,actions可以包含多个命令,每个命令用英文分号隔开;file表示处理的文件名,也可以在命令行输入数据,不需要使用文件名。

以下是awk命令的常用选项:

  • F:定义分隔符,默认为制表符(Tab);
  • v:设置变量;
  • f:从文件中读取脚本;
  • oF:输出文件的分隔符;
  • BEGIN:在处理文件之前执行一次的命令;
  • END:在处理文件之后执行一次的命令。

以下是awk命令常用的示例:

  1. 打印文本文件中的行

awk命令可以用来打印一个文本文件中的所有行。例如,打印my_file.txt中的所有行:

awk '{print}' my_file.txt
  1. 打印文件中某列的值

如果你想只打印某一列的值,可以指定不同的列分隔符,使用$符号就可以打印出指定的列。例如,在file.txt文件中,用逗号分隔每一列,打印第二列的内容:

awk -F, '{print $2}' file.txt

在这个例子中,-F选项指定分隔符为逗号。$2表示第二列,awk会输出第二列的值。

  1. 使用条件语句

awk命令可以使用条件语句来过滤结果。例如,打印file.txt文件中第二列值等于’hello’的行:

awk -F, '$2=="hello" {print}' file.txt

在这个例子中,-F选项指定分隔符为逗号。$2=="hello"表示如果第二列值等于’hello’,就执行后面的命令。

  1. 使用内置函数

awk命令支持多种内置函数,例如,要求file.txt文件中的第二列值的平均值:

awk -F, '{total += $2; count++} END {print total/count}' file.txt

在这个例子中,-F选项指定分隔符为逗号。{total += $2; count++}表示对第二列值累加求和,同时记录行数。END命令表示最后打印结果。

  1. 对文件的每一行执行同一个脚本

可以使用-f选项和脚本文件执行相同的脚本。例如,将脚本保存在myscript.awk文件中,对file.txt文件执行脚本:

awk -f myscript.awk file.txt

以上是awk命令的基本用法和常见示例,使用awk命令可以快速准确地处理文本数据,提高我们的工作效率。


http://www.kler.cn/a/18004.html

相关文章:

  • WebSocket和HTTP协议的性能比较与选择
  • C++ 数组与结构 编程练习
  • Pycharm PyQt5 环境搭建创建第一个Hello程序
  • Flink_DataStreamAPI_输出算子Sink
  • 猿创征文|Inscode桌面IDE:打造高效开发新体验
  • 2019年下半年试题二:论软件系统架构评估及其应用
  • 开关电源基础01:电源变换器基础(3)
  • 数影周报:假冒ChatGPT的恶意软件激增,谷歌开启无密码登录
  • docker-mysql的几个问题
  • 学习HCIP的day.04
  • 【383. 赎金信】
  • 从零开始学习Linux运维,成为IT领域翘楚(十)
  • 【刷题】142. 环形链表 II
  • maven配置阿里云镜像仓库
  • 关于C语言的一些笔记
  • 算法:递归启蒙-汉诺塔
  • ChatGPT使用入门
  • 计算机网络基础知识(一)计算机发展史、网络设备、网络结构及拓扑
  • 设计模式:SOLID原则
  • 2022级吉林大学面向对象第三次上机测试
  • 总结841
  • SSM框架学习-bean生命周期理解
  • new BroadcastChannel(),BroadcastChannel API使用介绍
  • 这就是实力~ 腾讯云大咖亲码 “redis深度笔记” 无废话全精华
  • 洗稿伪原创工具-洗稿生成器
  • SSM框架详解,实现高效优雅的Java Web开发