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

2021-12-20 18:37:06 浏览数 (1)

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

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

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

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

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

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

在Linux中使用Grep命令

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

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

代码语言:javascript复制
linuxmi@linuxmi:~/www.linuxmi.com$ cat linuxmi.txt

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

代码语言:javascript复制
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

显示匹配前后的行数

  • -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,

注意$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

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

0 人点赞