是否有类似于" perl -pe" python中的选项?

时间:2016-07-17 03:51:39

标签: python shell

TL; DR我想知道Python中的选项是什么,它可能大致对应于" -pe" Perl中的选项。

我曾经使用PERL一段时间,但是现在,我一直在转向PYTHON因为它的简单性和简单性。当我需要在shell提示符上进行简单的文本处理时,我使用了perl -pe选项。以下是一个例子。

grep foo *.txt | perl -pe 's/foo/bar/g'

要在Python中做类似的事情,有人可以向我解释我该怎么做吗?

2 个答案:

答案 0 :(得分:3)

public class Class1 { private String number = null; private static Class1 class1 = null; public static Class1 getInstance() { if(class1 == null) { class1 = new Class1(); } return class1; } private Class1(){} public void setNumber(String number) { this.number = number; } public String getNumber() { return this.number; } } public class Class2 { Class1 cla = Class1.getInstance(); public String number_to_compute = cla.getNumber(); } public class Class3 { static Class1 class1 = Class1.getInstance(); public static void main(String args[]) { class1.setNumber("123"); Class2 class2 = new Class2(); System.out.println(class1.getNumber()); System.out.println(class2.number_to_compute); } } 是两个参数-pe-p的组合。 -e选项大致相当于Python的-e选项,它允许您指定在命令行上运行的代码。没有Python等价的-c,它有效地添加代码来在从标准输入读取的循环中运行传递的代码。为此,您实际上必须在代码中编写相应的循环,以及从标准输入中读取的代码。

答案 1 :(得分:1)

Perl虽然是一种完全成熟的编程语言,但最初被认为是一种用于文本操作的工具。

另一方面,Python一直是一种通用的编程语言。它可以处理文本和文本的灵活性,与Java或C ++相比具有极大的灵活性,但是它将在其通用语法中完成,没有这些规则的例外,包括正则表达式的特殊语法,在没有其他指令的情况下它们本身就是一个程序。打开,读取和写入文件同样如此。

所以,你可以用“python -c ...”来从命令行运行一个Python脚本 - 但是你的命令必须是一个完整的程序 - 包括开头,中间和结尾。

因此,对于在stdin中传递的几个文件中的简单正则表达式替换,您可以尝试一下:

grep foo *txt| python3 -c "import sys, re, os; [(open(filename + 'new', 'wt').write(re.sub ('foo', 'bar', open(filename).read())), os.rename(filename + "new", filename))for filename in sys.stdin]"