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

liv*_*hak 0 python sed

我有一个python程序,调用sed如下.

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

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

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

或者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',' ')
Run Code Online (Sandbox Code Playgroud)

或者在Python 2Python 3re模块中找到的许多其他方法.