Linux 如何使用其他命令模拟egrep?
我必须模拟Linux 如何使用其他命令模拟egrep?,linux,bash,awk,grep,Linux,Bash,Awk,Grep,我必须模拟egrep以及其他命令的一些选项,主要是awk,但我真的不知道如何在脚本中实现它。我知道awk可以识别正则表达式,但它可以替代egrep 我真的不知道从哪里开始。使用的示例文件: 模拟: 1. 白鹭-n 2. 白鹭-v 或(正如丹尼斯在评论中指出的) 3. egrep-i(这仅在gnu awk中使用) 4. egrep-w(这仅在gnu awk中使用) 你为什么要这么做?这是一个非常主观的问题。你手头有具体的任务吗?你能帮我们把它分解一下,这样我们就能给出一个更符合实际的解决方案吗?这
egrep
以及其他命令的一些选项,主要是awk
,但我真的不知道如何在脚本中实现它。我知道awk
可以识别正则表达式,但它可以替代egrep
我真的不知道从哪里开始。使用的示例文件:
模拟:
1. <代码>白鹭-n
2. <代码>白鹭-v
或(正如丹尼斯在评论中指出的)
3. egrep-i
(这仅在gnu awk中使用)
4. egrep-w
(这仅在gnu awk中使用)
你为什么要这么做?这是一个非常主观的问题。你手头有具体的任务吗?你能帮我们把它分解一下,这样我们就能给出一个更符合实际的解决方案吗?这是一个练习。我必须模拟白鹭[n][v][I][w][f文件]。我想我必须使用“/reg-expr-goes-here/”之类的东西。一个练习?我们在这里谈论的是作业吗?你需要支持哪些选项?更接近于egrep-v的模拟:
awk'/LastLine/
。您的egrep-w
备选方案将输出误报。它应该是awk'/\/
。谢谢@denniswillamson,我会在答案中添加你对egrep-v
的建议,我忘记了单词边界(我的错):egrep-f
的意思是从文件中读取模式,而不是awk脚本。这可以用awk'(NR==FNR){++a[$0]}来模拟!一个[$0]'模式文件inputfile
或类似的文件。@tripleee Oopsie…更新了答案。我无法让您的解决方案发挥作用,因此我添加了自己的解决方案。但感谢您的反馈。:)是的,awk支持与egrep大致相同的正则表达式特性,您只需要将其放在斜杠分隔符中,反斜杠转义任何文本斜杠。
[jaypal:~/Temp] cat file
This is FirstLine
SecondLineEEE
AAAblablabla
ForthLineEEE
FifthLine
LastLine
[jaypal:~/Temp] egrep -n 'LastLine' file
6:LastLine
[jaypal:~/Temp] awk /LastLine/'{print NR":"$0}' file
6:LastLine
[jaypal:~/Temp] egrep -v 'LastLine' file
This is FirstLine
SecondLineEEE
AAAblablabla
ForthLineEEE
FifthLine
[jaypal:~/Temp] awk '/LastLine/{next}1' file
This is FirstLine
SecondLineEEE
AAAblablabla
ForthLineEEE
FifthLine
[jaypal:~/Temp] awk '!/LastLine/' file
This is FirstLine
SecondLineEEE
AAAblablabla
ForthLineEEE
FifthLine
[jaypal:~/Temp] egrep -i 'lastline' file
LastLine
[jaypal:~/Temp] gawk -v IGNORECASE=1 '/lastline/' file
LastLine
[jaypal:~/Temp] egrep -w 'is' file
This is FirstLine
[jaypal:~/Temp] gawk '/\<is\>/' file
This is FirstLine
[jaypal:~/Temp] cat file
This is FirstLine
SecondLineEEE
AAAblablabla
ForthLineEEE
FifthLine
LastLine
[jaypal:~/Temp] cat patternfile
LastLine
is
[jaypal:~/Temp] egrep -f patternfile file
This is FirstLine
LastLine
[jaypal:~/Temp] awk 'NR==FNR{a[$0]++;next} {for (x in a) if ($0~x) print $0}' patternfile file
This is FirstLine
LastLine