如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情
目录
在 Linux 系统中,“三剑客” 通常是指 grep、sed 和 awk 这三个功能强大的文本处理工具。
那么三剑客优劣如何呢?
三剑客的优势和劣势
grep 的优势和劣势
优势
简单高效的文本搜索:grep 是专门用于文本搜索的工具,在查找包含特定模式的行时速度非常快。
强大的正则表达式支持:它支持基本和扩展的正则表达式,能够进行复杂的模式匹配。
广泛的适用性:几乎可以用于任何文本文件的搜索,无论是配置文件、代码文件、日志文件还是纯文本文件等。
劣势
功能相对单一:主要侧重于文本搜索,对于复杂的文本编辑和处理任务(如替换、重新格式化等)功能有限。
输出格式固定:输出通常是包含匹配模式的整行内容,在某些需要对输出进行特殊格式化的场景下可能不太方便。
sed 的优势和劣势
优势
强大的文本编辑能力:sed 是一个流编辑器,可以对文本进行多种编辑操作,如替换、删除、插入等。
灵活的行处理:可以基于行号或者模式匹配来处理特定的行。
支持脚本化操作:可以将一系列的 sed 命令组合成脚本,用于处理复杂的文本编辑任务。
劣势
学习曲线较陡:sed 的命令语法相对复杂,尤其是对于初学者来说,需要花费一些时间来理解和掌握诸如替换、插入、删除等操作的语法规则。
处理大型文件效率可能受影响:在处理非常大型的文件时,如果进行复杂的编辑操作,sed 的性能可能会下降。
awk 的优势和劣势
优势
数据提取和处理能力强:awk 把文本看作是由记录(行)和字段(列)组成的表格,非常适合用于数据提取和处理。
强大的编程功能:它是一种编程语言,具有变量、函数、条件语句和循环语句等编程结构。这使得它可以进行复杂的数据计算和转换。
格式化输出方便:可以方便地对输出进行格式化。
劣势
复杂性和资源消耗:由于 awk 是一种编程语言,对于简单的文本处理任务可能会显得过于复杂。而且,在处理大型文件或者复杂任务时,它的资源消耗(如内存和 CPU)可能比 grep 和 sed 要高。
启动和执行时间可能较长:与 grep 的快速搜索相比,awk 在启动和执行过程中可能需要更多的时间,尤其是当脚本比较复杂或者文件比较大时。
言归正传咱们先学三弟 ==》grep
一、grep
1、查找单个字符串
使用以下命令可以在文件中查找一个字符串:
grep "string" filename 例如,要查找文件example.txt中包含字符串"hello"的所有行,可以使用以下命令:
grep "hello" example.txt
2、查找多个字符串
可以使用grep命令来查找多个字符串。可以使用管道符(|)将多个字符串组合在一起。例如,要查找文件example.txt中包含字符串"hello"或"world"的所有行,可以使用以下命令:
grep "hello|world" example.txt
3、使用正则表达式查找模式
grep命令还支持使用正则表达式来查找模式。以下是一些常用的正则表达式:
^:匹配行的开头 $:匹配行的结尾 .:匹配任意字符 *:匹配前面的字符0次或多次 +:匹配前面的字符1次或多次 ?:匹配前面的字符0次或1次 []:匹配中括号中的任意一个字符 [^]:匹配不在中括号中的任意一个字符 例如,要查找文件example.txt中以"hello"开头的所有行,可以使用以下命令:
grep "^hello" example.txt ``
3.1、查找不包含某个字符串的行
查找不包含某个字符串的行。可以使用grep命令的-v选项来实现。例如,要查找文件example.txt中不包含字符串"hello"的所有行,可以使用以下命令:
grep -v "hello" example.txt
3.2、查找包含某个字符串的文件
除了查找包含某个字符串的行,还可以使用grep命令来查找包含某个字符串的文件。可以使用-r选项来递归查找指定目录下的所有文件。例如,要查找目录/home/user下所有包含字符串"hello"的文件,可以使用以下命令:
grep -r "hello" /home/user
3.3、统计匹配
grep命令还支持统计匹配的行数。可以使用-c选项来实现。例如,要查找文件example.txt中包含字符串"hello"的行数,可以使用以下命令:
grep -c "hello" example.txt
3.4、忽略大小写
忽略大小写来查找字符串。可以使用-i选项来实现。例如,要查找文件example.txt中包含字符串"hello"或"HELLO"的所有行,可以使用以下命令:
grep -i "hello" example.txt
3.5 显示匹配行的上下文
查看匹配行的上下文,可以使用-A、-B和-C选项来指定显示匹配行的后几行、前几行或前后几行。例如,要查找文件example.txt中包含字符串"hello"的行以及它的后两行,可以使用以下命令:
grep -A 2 "hello" example.txt
3.6 显示匹配行的行号
显示匹配行的行号,可以使用-n选项来实现。例如,要查找文件example.txt中包含字符串"hello"的行以及它们的行号,可以使用以下命令:
grep -n "hello" example.txt
3.7 只显示匹配的字符串
只显示匹配的字符串,而不是整行。可以使用-o选项来实现。例如,要查找文件example.txt中所有包含字符串"hello"的单词,可以使用以下命令:
grep -o "hello" example.txt
3.8 从标准输入读取数据
除了从文件中读取数据,还可以从标准输入读取数据。可以使用-选项来实现。例如,要从标准输入读取数据并查找包含字符串"hello"的行,可以使用以下命令:
cat example.txt | grep "hello"
3.9 限制搜索的文件类型
限制搜索的文件类型,可以使用--include和--exclude选项来实现。例如,要查找目录/home/user下所有扩展名为.txt的文件中包含字符串"hello"的行,可以使用以下命令:
grep "hello" --include ".txt" /home/user/
3.10 将匹配行输出到文件
将匹配行输出到文件,可以使用--color=never和-o选项来实现。例如,要将文件example.txt中包含字符串"hello"的行输出到文件output.txt中,可以使用以下命令:
grep --color=never "hello" example.txt | tee output.txt 可以将多个文件名作为参数传递给grep命令。例如,要查找文件example1.txt和example2.txt中包含字符串"hello"的行,可以使用以下命令:
grep "hello" example1.txt example2.txt
3.11 查找空白行
查找空白行,可以使用以下命令:
grep "^$" example.txt
二、grep会用到的参数
1.-v 取反
2.-r 递归过滤
3.-i 不区分大小写
4.-w 精确匹配
5.-o 匹配过程
6.-E 支持扩展正则
7.-A 显示过滤到内容的后n行
8.-B 显示过滤到内容的前n行
9.-C 显示过滤到内容的前后各n行
10.-n 显示到过滤内容的行号
11.-c 统计某个单词出现的次数
好了,今天的分享就到这里了,下一篇我准备分享三剑客二哥sed
想成为大佬,就要从小白开始,从0开始,一点一点的积累,慢慢成长,明天你就是大佬!!想学习更多麒麟操作系统的知识,关注小屁,让你成为运维老鸟~~~~