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