我已经有一段时间成为Linux用户了,并且对大多数常见的命令行实用程序都有相当不错的了解。但是,与编程有关的又是
grep
,awk
和sed
。关于我使用grep唯一的事情是将内容输送到其中以在日志文件中查找文件,
ps
的输出等。我根本没有使用过awk
或sed
。这些实用程序有什么好的教程吗?#1 楼
通常,grep
用于搜索操作,sed
用于搜索和替换操作,而awk
特别适合于表格数据,并且学习曲线比某些替代方法低。这些工具之间也有重叠的功能,请参见:何时使用grep,less,awk,sed grep
文档:
man grep
,info grep
,GNU grep在线手册grep和egrep的介绍
grep教程
ripgrep-替代实现,默认情况下是递归的,尊重
.gitignore
,Rust / PCRE2 regex,SIMD等关于GNU的电子书grep和ripgrep
文档:
man sed
,info sed
,GNU sed在线手册由示例第1部分,第2部分,第3部分
sed教程
关于GNU sed单线的电子书
文档:
man awk
,info awk
,info gawk
,GNU awk在线手册AWK:教程和简介
示例第1部分,第2部分,第3部分的Awk
AWK入门(alt链接)
关于GNU awk单线的电子书
进一步阅读
RegularExpressions.info
>
#2 楼
O'Reilly的sed和awk书非常适合er sed和awk。#3 楼
我写了关于sed
(sed的权威指南)的书,其中包括一个教程。它全面介绍了sed
以及相关命令,例如grep
,tr
,head
和tail
。还完全涵盖了正则表达式,比我在其他地方见过的要好得多。 我同意其他人的观点,充分理解正则表达式非常重要。我也同意
sed
最适合用于更简单的任务,更复杂的脚本会很快变得晦涩难懂。我不同意
awk
已过时,相反。就像许多unix事物(例如vi
)一样,有一个学习曲线,但值得。我不同意使用
awk
代替grep
的建议。根据我的经验,这没有任何意义。 grep
非常好简单。评论
我是grep的第二件事-如果可以帮助您,不要将拖拉机拖到高速公路上。而且它也是一本不错的书-谢谢。
–mikeserv
2014年8月23日在4:44
#4 楼
由O'Rielly出版的《正则表达式食谱》足以使您以使用它们的任何语言进入任何地方。#5 楼
该书的作者是Kernigan和Pike,书名类似于“ Unix编程环境”。我实际上从中学到的书叫做“ Berkely Unix简介”。
#6 楼
如果要从这3个(grep,sed和awk)中学习一个,就可以学习awk / gawk。awk可以执行grep和sed的功能,即使用regex搜索/替换文本,以及更多其他功能,因为它也可以一种编程语言。如果您了解gawk / awk的内在知识,则无需使用grep / sed / wc / cut等。只需一个工具即可。评论
哦,顺便说一句,我们甚至不需要awk,您只需使用g ++ -x c ++--o / tmp / prog && / tmp / prog并键入您的命令即可。一种统治所有人的工具! :-)
– Lie Ryan
2010-09-28 9:10
当您只需将二进制文件直接写入文件时,谁需要编译器?如果您感到懒惰,cat会做,或ed。
–cas
2011-09-29 4:54
#7 楼
在我看来,awk或多或少已经过时了(但是,其他人会强烈反对这种观点),如今我认识的大多数人都改为使用某些脚本语言(如perl或今天的python)来进行高级文本操作。 sed非常适合执行简单的文本操作任务,我一直都在使用它。我主要是通过查看sed单行代码(例如http://sed.sourceforge.net/sed1line.txt)来学习它的。关于grep:好吧,您基本上希望对正则表达式有扎实的了解(sed也需要)。我在这里只是使用了texinfo手册。评论
对于处理从其他命令管道传输的数据,awk仍然非常有用。对于简单的命令行用法,我不会认为它已经过时了。
– MaQleod
2010-09-25 21:57
而且由于POSIX,它应该在许多系统上都可用。
– echox
2010-09-27 13:04
大多数“高级AWK”可能最好用perl或python或其他任何东西来完成,但是简单的东西仅用awk就能很好地完成。
–user455
2010-09-28 14:12
在尝试解决问题时,Awk仍然有助于了解您可能在网上找到的各种答案。您经常会在线上看到一些使用awk语句的示例,例如awk'{print $ 3}'。
–史蒂文·D
2010-09-28 15:30
在工作中以及在家里,我经常使用awk,然后使用sed。在固定的表格数据(如dpkg -l输出)上,awk不能胜过awk。我不会做任何复杂的事情,但是如果没有awk,我会简而言之。对于更通用的编程语言,我不能说相同的话,尽管我喜欢其中的一些。
– J. M. Becker
2011年12月31日4:22
评论
完全正确! :)我一直推迟学习正则表达式,因为我告诉自己,有一天我会通过阅读Kleene关于逻辑的原始论文来学习它,然后发明了该概念,然后广泛用于计算机。
我同意gvkv:如果您需要学习这些知识,那么不妨学习一下Perl,它可以完成grep,sed和awk的工作(并且以几乎相同的方式),并且还有很多其他功能。
我一直喜欢thegeekstuff.com。他们直接切入了示例,而通常的手册页感觉就像是90%的脚注。