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

use*_*855 6 shell scripting perl

我知道这个问题非常主观.但我无法以更好的方式提出问题.我会很感激一些指导.

作为开发人员,我常常觉得如果我能够在日志文件,一组源文件或某些数据集等上执行一些相当复杂的任务,那么对我来说会有多么容易.

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

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

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

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

bri*_*gge 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
Run Code Online (Sandbox Code Playgroud)

例如在红宝石中

seq 1 4 | ruby -ne 'BEGIN{ $product = 1 }; $product *= $_.to_i; END { puts $product }'
24
Run Code Online (Sandbox Code Playgroud)

这与perl非常相似

seq 1 4 | perl -ne 'BEGIN{ $product = 1 }; $product *= $_; END { print $product }'
24
Run Code Online (Sandbox Code Playgroud)

在Python中,同样如下所示:

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

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


Bri*_*new 3

我会使用 Perl 而不是 bash/sed/awk 组合。为什么 ?

  1. 您只有一个可执行文件,而不是生成多个可执行文件来完成工作。
  2. 您可以利用各种 Perl 模块来完成大多数任务(有关可用模块,请参阅CPAN )

事实上,出于同样的原因,我会推荐任何脚本语言而不是 shell/awk/sed 组合。我对 sed/awk本身没有问题,但随着您所需的解决方案变得更加复杂/冗长,我发现更强大的脚本语言更具可扩展性,并且(在某种程度上)可重构以供重用。