什么在Bash / Python / Perl / Ruby / Sed / Awk中用于系统管理,编码附件

时间:2009-11-25 22:08:39

标签: shell perl scripting

我知道这个问题非常主观。但我无法以更好的方式提出问题。我希望得到一些指导。

作为一名开发人员,我常常觉得如果我可以使用一些工具在日志文件,一组源文件或某些数据集等上执行一些相当复杂的任务,那对我来说会更容易。

显然,当需要重复完成相同类型的任务并且速度至关重要时,我可以考虑用C ++ / Java编写它。

但是大多数时候,这是某种文本处理或文件搜索活动,我只想做一次只是为了执行快速检查或做一些初步分析等。在这种情况下,我会更好手动完成任务而不是用C ++ / Java编写。但如果我知道像Bash / Python / Perl / Ruby / Sed / Awk这样的语言,我肯定可以在几秒钟内完成。

我知道整个问题是主观的,没有客观明确的答案,但总的来说开发者社区整体上有什么感受?我应该知道这些语言的哪个子集,以便我可以轻松完成所有这些任务并提高我的工作效率。

Perl会是一个不错的选择吗?
它是一个超级的Sed / Awk集合,它允许编写简洁的代码。我可以用更少的代码行完成。它既不可读也不易维护,但我从来不想要那些功能。 困扰我的唯一事情就是Perl最近得到的负面宣传,并且受到Ruby / Python社区的批评很多。另外,我不确定它是否可以完全取代bash脚本。 如果没有,那么Perl + Bash是否适合这类任务呢?

7 个答案:

答案 0 :(得分:7)

我倾向于使用ruby进行大量处理。它具有perl的所有功能,但我发现它更具可读性。 perlruby都支持-n-e-p选项。

-e 'command'    one line of script. Several -e's allowed. Omit [programfile]
-n              assume 'while gets(); ... end' loop around your script
-p              assume loop like -n but print line also like sed

例如在ruby中

seq 1 4 | ruby -ne 'BEGIN{ $product = 1 }; $product *= $_.to_i; END { puts $product }'
24

这与perl非常相似

seq 1 4 | perl -ne 'BEGIN{ $product = 1 }; $product *= $_; END { print $product }'
24

在Python中,同样如下:

seq 1 4 | python -c 'import sys; print reduce(lambda x,y : int(x)*int(y),  sys.stdin.read().splitlines(True))'
24

虽然可以在bash / awk / sed中执行上述操作,但您将受到缺乏更多高级功能的限制。

答案 1 :(得分:4)

Python比bash更具表现力和可读性,但需要更多设置:import os等等。对于简单的任务,bash更快 - 这对此最重要。并且不要低估bash中输入/输出重定向的强大功能!

答案 2 :(得分:3)

我发现Python + Bash是一个非常好的组合 我通常使用Python,因为它非常易读且易于维护。因为有很多在线文档可供使用。

是的,我建议你阅读http://www.ibm.com/developerworks/aix/library/au-python/

答案 3 :(得分:2)

我会在bash / sed / awk组合中使用Perl。为什么?

  1. 您只有一个可执行文件,而不是产生多个可执行文件才能正常工作。
  2. 您可以使用各种Perl模块来执行大多数操作(有关可用模块,请参阅CPAN
  3. 事实上,出于同样的原因,我建议使用shell / awk / sed组合的任何脚本语言。我对sed / awk 本身没有问题,但随着您所需的解决方案变得更加复杂/冗长,我发现更强大的脚本语言更具可扩展性,并且(在某种程度上)可重构重复使用。

答案 4 :(得分:1)

使用shell脚本,你需要知道的有点bash / sh和很多awk。 Bash用于调用命令,awk用于处理。下面的一些unix工具,与许多人使用它们的事实相反,并不是必需的,因为awk可以完成它们的功能。

1) cut
2) sed
3) wc
4) (e)grep
5) cat
6) head 
7) etc..

和其他一些功能重叠的人。最后,您的脚本不会使用冗余工具混乱并减慢脚本速度。

Perl / Python也是非常有用的系统管理员工具。他们都做类似的事情,并有图书馆,以帮助您的系统管理员任务。唯一重要的区别在于,从美学角度来说,代码的外观是用它们写的。

如果需要,您可以了解Ruby,但就sysadmin而言,我会说改为使用Perl / Python。

答案 5 :(得分:1)

在您编写这几段时,您可能已经learned enough Python to make your life significantly better

任何已经了解C ++或Java的人都可以在大约4小时内提高Python的效率。请阅读教程。

答案 6 :(得分:0)

我的第一个调用端口是使用sed进行bash提供正则表达式处理。你可以用bash for循环,grep和一些正则表达式做很多事情。

如果您还不了解正则表达式,那么值得学习正则表达式。允许您使用它们的编辑器(如vi)在操作文件时非常有用(例如,您有一组从日志文件中提取的数据,并且您需要将其转换为一组SQL语句)。

如果我需要花费几分钟时间来弄清楚如何在bash / sed中进行任何解析任务,我通常最终会使用perl。正如ikkebr所建议的那样,python可能和perl一样好(或者更好);我不幸第一次学习perl,所以我更熟悉它 - 如果我要重新开始,我会学习python而不是我想。