将变量而不是输入文件传递给sed

时间:2015-03-30 08:11:26

标签: python sed

我有一个调用sed的python程序,如下所示。

url = os.system("sed 's/.*proxy=\([^&]*\).*/\1/' message")

message是一个包含一些数据的变量。我认为sed需要一个位于该位置的文件。这通常是如何在python

中完成的

2 个答案:

答案 0 :(得分:5)

Python带有自己的内部正则表达式引擎,这是首选,尤其,因为os.system()的返回代码是程序的退出代码而不是标准输出。

它还有助于提高可移植性,因为调用外部可执行文件可能无法在所有系统上运行(Windows默认情况下没有sed。)

有关详细信息,请查看re.sub

import re
url = 'http://xyzzy.com?paxdiablo=awesome'
url = re.sub(r'^[^?]*\?','',url)
url = re.sub(r'=',' is ',url);
print url

re.findall

import re
url = 'http://xyzzy.com?Python=fantastic&paxdiablo=still%20awesome'
args = re.findall(r'[?&]([^?&]*=[^?&]*)', url)
for arg in args:
    (object,property) = arg.split("=")
    print object, "is", property.replace('%20',' ')

re模块中为Python 2Python 3找到的许多其他方法。

答案 1 :(得分:1)

E.g。

message = 'asdf proxy=127.0.0.1 fdsa'
re.sub('.+proxy=([^& ]*).*', r'\1', message)

产量

127.0.0.1

请注意正则表达式开头的贪婪与非贪婪匹配。