Linux三剑客之grep,awk,sed命令必知必会

Linux中的Grep,Awk和Sed命令之间有什么区别?

Grep命令用于查找文件中的特定模式,并输出包含搜索模式的所有结果。

另一方面,Awk也用于在文件中搜索某些模式,但会继续在模式匹配上执行某些任务。

可以同时使用Grep和awk来缩小搜索增强结果的范围。

Grep是用于快速搜索匹配模式的简单工具,但是awk更像是一种编程语言,用于处理文件并根据输入值生成输出。

sed命令对修改文件最有用,它搜索匹配的模式并替换它们并输出结果

在Linux中使用Grep命令

Grep命令用于查找文件中的特定模式并显示与该模式匹配的所有字段。搜索的模式通常是正则表达式。

在我的示例中,我有一个名为linuxmi的文件,如下所示:

linuxmi@linuxmi:~/www.linuxmi.com$ cat linuxmi.txt

 

 

 要在文件中输出每个包含“linuxmi”一词的字段

linuxmi@linuxmi:~/www.linuxmi.com$ grep -i "linuxmi" linuxmi.txt

 

 

 上面命令中的“ -i”告诉grep命令忽略任何区分大小写的命令。

  “ -c”输出文件中匹配模式出现次数的计数。

 linuxmi@linuxmi:~/www.linuxmi.com$ grep -c "linuxmi" linuxmi.txt

 

 

 要从包含特定模式的目录中的所有文件中搜索,我们使用'*'

 它显示了特定的文件和匹配结果

linuxmi@linuxmi:~/www.linuxmi.com$ grep "linuxmi" *

 

 

 要仅输出包含匹配模式的文件,我们使用“ -l”

 

 

 如果您知道文件名可以输出所有匹配项,则还可以指定文件名。

grep "linuxmi" test test1 test2

匹配文件中的整个单词。

默认情况下,即使在子字符串中找到了Grep,也会输出所有出现的某种特定模式。

为了仅匹配整个单词,我们使用“ -w”标志

linuxmi@linuxmi:~/www.linuxmi.com$ grep -w "linuxmi" linuxmi.txt

 

 

 要在搜索中包含子目录,请使用“ -r”,如下所示:

linuxmi@linuxmi:~/www.linuxmi.com$ grep -r "linuxmi" *

仅输出匹配的模式Grep显示包含匹配模式的整个句子。我们只能使用'-o'字符串来显示搜索模式。

linuxmi@linuxmi:~/www.linuxmi.com$ grep -o "linuxmi" linuxmi.txt

 

 

 带数字的输出是使用'-n'的匹配模式。这将显示文件中匹配模式所在的特定数字计数。

linuxmi@linuxmi:~/www.linuxmi.com$ grep -n "linuxmi" linuxmi.txt

 

 

 反转匹配以使用'-v'显示不匹配输入模式的输出在这种情况下,我们将输出不包含单词“linuxmi”的其他任何内容。

linuxmi@linuxmi:~/www.linuxmi.com$ grep -v "linuxmi" linuxmi.txt

 

 

 匹配以某个字符串开头的所有字段,例如,输出所有以单词“sat”开头的字段

 

 

 匹配以给定字符串结尾的行“ $”正则表达式表示行的结尾可用于匹配以特定字符串结尾的行。在本例中,我们注意匹配以“ 0”结尾的行。

linuxmi@linuxmi:~/www.linuxmi.com$ grep "0$" linuxmi.txt

 

 

 

 显示匹配前后的行数

  • -A - 指定匹配后要显示的行数
  • -B - 指定要显示的行数
  • -C - 指定匹配之前和之后要显示的行数

使用“ -e”在同一行中指定多个匹配模式

linuxmi@linuxmi:~/www.linuxmi.com$ grep -e "linuxmi" -e "ubuntu" -e "fedora" linuxmi.txt

 

 

为了将grep输出限制在行数以内,我们使用' -m '

linuxmi@linuxmi:~/www.linuxmi.com$ grep -m1 "linuxmi" linuxmi.txt

Manny linuxmi account 49000

linuxmi@linuxmi:~/www.linuxmi.com$ grep -m2 "linuxmi" linuxmi.txt

Manny linuxmi account 49000
tarun linuxmi sales 15000

在Linux中使用AWK命令

Awk命令更多是用于处理数据和生成报告的脚本语言它不需要任何编译,并且用户可以使用数字函数,变量,字符串函数和逻辑运算符。

它使您能够以语句形式编写简单有效的程序以在文件中搜索特定模式,并在找到匹配项时执行操作

当使用' awk '时,我们将花括号括起来。

模式和动作都形成规则,整个awk程序都用单引号引起来。

如何在Linux中使用AWK命令

默认情况下,Awk命令用于打印文件的内容。在本例中,没有指定模式,因此操作应用于文件的每一行

linuxmi@linuxmi:~/www.linuxmi.com$ awk '{print}' linuxmi.txt

 

 例如,要打印与给定模式匹配的行,让我们打印其中包含单词“linuxmi”的所有行

linuxmi@linuxmi:~/www.linuxmi.com$ awk '/linuxmi/'{print}' linuxmi.txt

 

 

Awk用于将一行分割成多个字段并打印出内容。让我们打印linuxmi.txt文件中行的第一部分和第二部分。

linuxmi@linuxmi:~/www.linuxmi.com$ awk '{print $1,$2}' linuxmi.txt

 

 注意$0输出整行

NR - 打印行以及行号。

linuxmi@linuxmi:~/www.linuxmi.com$ awk '{print NR,$0}' linuxmi.txt

 

 也可以用于指定从某个数字打印到另一个数字让我们显示从第3行到第6行。

NF - 输出每个记录(行)中包含的字段数

linuxmi@linuxmi:~/www.linuxmi.com$ awk 'NR==3, NR==6 {print NR,$0}' linuxmi.txt

$ NF - 打印最后一列

linuxmi@linuxmi:~/www.linuxmi.com$ awk '{print NF}' linuxmi.txt

OFS - 输出字段分隔符–用于指定输出值的分隔符。

linuxmi@linuxmi:~/www.linuxmi.com$ awk 'OFS="/" {print $1,$4}' linuxmi.txt

Awk BEGIN和END规则

BEGIN规则应该在任何文本处理之前执行一次,并且在执行其他任何操作之前先执行。

添加模式

大于的值的输出。例如,在我们的文件中,最后一个字段表示薪水数字,我们只需要在值大于35000时输出

linuxmi@linuxmi:~/www.linuxmi.com$ awk '$NF>=35000 {print $1,$4}' linuxmi.txt

内置函数

awk带有内置函数,例如数值,如下所示

linuxmi@linuxmi:~/www.linuxmi.com$ awk 'BEGIN{print sqrt(400)}'

20

Awk脚本

如果发现自己编写了复杂的awk命令,则可以选择将它们放在脚本文件(.awk)中并从那里运行它们。

在Linux中使用SED命令

SED是流编辑器(stream editor)的缩写

它可以用于执行不同的功能,例如搜索,查找和替换,插入和删除

但是,查找和替换很常见,您无需打开文件即可替换单词。

将测试文件中的“linuxmi”一词替换为“xxvi”并输出结果:

linuxmi@linuxmi:~/www.linuxmi.com$ sed 's/linuxmi/xxvi/' linuxmi.txt

为了替换每次出现,我们在表达式的末尾添加“ g”如下所示

linuxmi@linuxmi:~/www.linuxmi.com$ sed 's/linuxmi/xxvi/g' linuxmi.txt

要仅替换特定数量的出现次数,请在'g'处指定数字。例如,最多替换第四行:

linuxmi@linuxmi:~/www.linuxmi.com$ sed 's/linuxmi/xxvi/4' linuxmi.txt

要从某个特定位置替换为文件的其余部分,请指定以数字开头的数字和'g'来表示文件的全部或其余部分

linuxmi@linuxmi:~/www.linuxmi.com$ sed 's/linuxmi/xxvi/4g' linuxmi.txt

要仅替换特定行,请在下面的第三行中指定要替换的文件行。

linuxmi@linuxmi:~/www.linuxmi.com$ sed '3 s/linuxmi/xxvi/' linuxmi.txt

要仅打印替换的行而不是打印所有文件内容:

linuxmi@linuxmi:~/www.linuxmi.com$ sed -n 's/linuxmi/xxvi/p' linuxmi.txt

从某一行开始更换,例如,从第3行到最后

linuxmi@linuxmi:~/www.linuxmi.com$ sed '3,g s/linuxmi/xxvi/' linuxmi.txt

使用SED删除文件的行。例如,要删除文件的第5行:

linuxmi@linuxmi:~/www.linuxmi.com$ sed '5d' linuxmi.txt

要删除最后一行:

linuxmi@linuxmi:~/www.linuxmi.com$ sed '$d' linuxmi.txt

从第n行开始删除到最后,例如,从第3行到最后:

linuxmi@linuxmi:~/www.linuxmi.com$ sed '3,$d' linuxmi.txt

要删除模式匹配文件:

linuxmi@linuxmi:~/www.linuxmi.com$ sed '/pattern/d' linuxmi.txt

这就是我们有关如何在Linux中使用Grep,Awk和Sed命令的指南。

 

参考:https://www.linuxmi.com/linux-grep-awk-sed.html

posted @ 2021-12-18 07:33  Vincent-yuan  阅读(523)  评论(0编辑  收藏  举报