我目前通过一堆不好记的AWK、sed、Bash和一小部分Perl来做我的文本文件操作。

我已经看到提到的一些地方,python很适合做这种事情。我如何使用Python来代替shell脚本,AWK, sed和朋友?


当前回答

In the beginning there was sh, sed, and awk (and find, and grep, and...). It was good. But awk can be an odd little beast and hard to remember if you don't use it often. Then the great camel created Perl. Perl was a system administrator's dream. It was like shell scripting on steroids. Text processing, including regular expressions were just part of the language. Then it got ugly... People tried to make big applications with Perl. Now, don't get me wrong, Perl can be an application, but it can (can!) look like a mess if you're not really careful. Then there is all this flat data business. It's enough to drive a programmer nuts.

进入Python、Ruby等。这些都是非常好的通用语言。它们支持文本处理,并且做得很好(尽管可能与语言的基本核心没有那么紧密地交织在一起)。但它们也可以很好地扩展,并且在一天结束时仍然有漂亮的代码。他们还发展了相当庞大的社区,有大量的图书馆,几乎可以提供任何东西。

Now, much of the negativeness towards Perl is a matter of opinion, and certainly some people can write very clean Perl, but with this many people complaining about it being too easy to create obfuscated code, you know some grain of truth is there. The question really becomes then, are you ever going to use this language for more than simple bash script replacements. If not, learn some more Perl.. it is absolutely fantastic for that. If, on the other hand, you want a language that will grow with you as you want to do more, may I suggest Python or Ruby.

不管怎样,祝你好运!

其他回答

我建议你看一本很棒的在线书籍Dive Into Python。这就是我最初学习这门语言的方式。

除了教你语言的基本结构和大量有用的数据结构之外,它还有一个关于文件处理的很好的章节,以及关于正则表达式等的后续章节。

截至2015年和Python 3.4的发布,现在有一个相当完整的用户交互shell: http://xon.sh/或https://github.com/scopatz/xonsh

演示视频没有显示正在使用的管道,但是在默认shell模式下支持管道。

Xonsh(“conch”)非常努力地模仿bash,因此您已经获得了肌肉记忆,例如

env | uniq | sort -r | grep PATH

or

my-web-server 2>&1 | my-log-sorter

仍然可以正常工作。

本教程相当冗长,似乎涵盖了人们通常在ash或bash提示符时所期望的大量功能:

Compiles, Evaluates, & Executes! Command History and Tab Completion Help & Superhelp with ? & ?? Aliases & Customized Prompts Executes Commands and/or *.xsh Scripts which can also be imported Environment Variables including Lookup with ${} Input/Output Redirection and Combining Background Jobs & Job Control Nesting Subprocesses, Pipes, and Coprocesses Subprocess-mode when a command exists, Python-mode otherwise Captured Subprocess with $(), Uncaptured Subprocess with $[], Python Evaluation with @() Filename Globbing with * or Regular Expression Filename Globbing with Backticks

最好的选择是专门针对您的问题的工具。如果它正在处理文本文件,那么Sed、Awk和Perl是最佳竞争者。Python是一种通用动态语言。与任何通用语言一样,它支持文件操作,但这不是它的核心目的。如果我特别需要一种动态语言,我会考虑Python或Ruby。

简而言之,非常好地学习Sed和Awk,以及所有其他随*nix风格而来的好东西(所有Bash内置,grep, tr等等)。如果您感兴趣的是文本文件处理,那么您已经使用了正确的方法。

我已经构建了半长的shell脚本(300-500行)和Python代码,它们具有类似的功能。当执行许多外部命令时,我发现shell更容易使用。当有大量文本操作时,Perl也是一个很好的选择。

如果您想使用Python作为shell,为什么不看看IPython呢?用互动的方式学习语言也很好。 如果需要进行大量的文本操作,并且使用Vim作为文本编辑器,那么还可以直接用python为Vim编写插件。只需在Vim中输入“:help python”,然后按照说明操作,或者看看这个演示文稿。它是如此简单和强大的编写函数,你将直接在你的编辑器中使用!