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

Python 将变量而不是输入文件传递给sed,python,sed,Python,Sed,我有一个python程序,它调用sed,如下所示 url = os.system("sed 's/.*proxy=\([^&]*\).*/\1/' message") message是一个包含一些数据的变量。我认为sed希望在那个地方有一个文件。python通常是如何做到这一点的?python自带了自己的内部正则表达式引擎,这是最好的选择,特别是因为os.system()的返回代码是程序的退出代码,而不是它的标准输出 它还有助于提高可移植性,因为调用外部可执行文件可能无法在所有系统上工

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

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

message是一个包含一些数据的变量。我认为sed希望在那个地方有一个文件。python通常是如何做到这一点的?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',' ')

或者在Or.

Python的
re
模块中找到的许多其他方法都有自己的内部正则表达式引擎,这是更好的选择,特别是因为
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',' ')
或者在Or的
re
模块中找到的许多其他方法。

例如

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

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

例如

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

127.0.0.1

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

您是否在寻找re.sub()?为什么不使用
re
模块来进行匹配?向系统调用一个简单的正则表达式替换似乎很奇怪。您是在寻找re.sub()吗?为什么不使用
re
模块呢?向系统调用一个简单的正则表达式替换似乎很奇怪。第二个参数'r'\1'是什么意思?@liv2hak与您的
sed
code@liv2hak单引号前的r告诉python不要将反斜杠解释为启动转义序列,而是字面意义上的反斜杠,即.\1作为对第一个括号中匹配的字符串的反引用。`r'\1'`第二个参数的含义是什么?@liv2hak与您的
sed
code@单引号前的r告诉python不要将反斜杠解释为启动转义序列,而是按字面意思理解,即.\1作为对第一个括号中匹配的字符串的反向引用。