将变量而不是输入文件传递给 sed
passing a variable instead of input file to sed
我有一个 python 程序调用 sed
如下。
url = os.system("sed 's/.*proxy=\([^&]*\).*//' message")
message 是一个变量,其中包含一些 data.I 认为 sed 需要在该位置的文件。在 python
中通常是如何完成的
Python 带有自己的内部正则表达式引擎,这将是更可取的, 尤其是 因为来自 os.system()
的 return 代码是程序的退出代码而不是它的标准输出。
它还有助于提高可移植性,因为调用外部可执行文件可能无法在所有系统上运行(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',' ')
例如
message = 'asdf proxy=127.0.0.1 fdsa'
re.sub('.+proxy=([^& ]*).*', r'', message)
产量
127.0.0.1
注意正则表达式开头的贪婪匹配与非贪婪匹配。
我有一个 python 程序调用 sed
如下。
url = os.system("sed 's/.*proxy=\([^&]*\).*//' message")
message 是一个变量,其中包含一些 data.I 认为 sed 需要在该位置的文件。在 python
中通常是如何完成的Python 带有自己的内部正则表达式引擎,这将是更可取的, 尤其是 因为来自 os.system()
的 return 代码是程序的退出代码而不是它的标准输出。
它还有助于提高可移植性,因为调用外部可执行文件可能无法在所有系统上运行(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',' ')
例如
message = 'asdf proxy=127.0.0.1 fdsa'
re.sub('.+proxy=([^& ]*).*', r'', message)
产量
127.0.0.1
注意正则表达式开头的贪婪匹配与非贪婪匹配。