在sed内处理换行;从Python调用的命令
我的命令中的换行出现问题,涉及使用在sed内处理换行;从Python调用的命令,python,regex,bash,sed,subprocess,Python,Regex,Bash,Sed,Subprocess,我的命令中的换行出现问题,涉及使用sed 情况如下。当我从Bash执行以下命令时,我得到: cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed -e s/ph/\\nPH/g | grep -v ^$ PHysical id : 0core id : 0 PHysical id : 0core id : 1 如您所见,sed命令将ph替换为\nPH,这样我可以为每个“物理id…”获得一个新行
sed
情况如下。当我从Bash执行以下命令时,我得到:
cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed -e s/ph/\\nPH/g | grep -v ^$
PHysical id : 0core id : 0
PHysical id : 0core id : 1
如您所见,sed
命令将ph替换为\nPH,这样我可以为每个“物理id…”获得一个新行
现在,我从Python调用这个bash命令。下面是我的一小段代码,其中包含所有相关的库导入
import subprocess
cmd = 'cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed -e s/ph/\\nPH/g | grep -v ^$ '
subprocess.call(cmd, shell=True, universal_newlines=True, stdin=subprocess.PIPE)
问题是我得到了:
nPHysical id : 0core id : 0nPHysical id : 0core id : 1
在一条线上。似乎“\n”没有被处理,因为字母n是在PH之前打印的
我需要很好地打印输出,以便以后可以将| sort | uniq | wc-l
添加到我的命令中以计算行数
我非常感谢Bash和Python大师的帮助
谢谢。试试:
r表示原始字符串。您可能没有正确转义某些字符。只需将sed的替换命令用逗号(“”)括起来,以确保它正确地传递到python子进程中:
import subprocess
cmd = 'cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed -e "s/ph/\\nPH/g" | grep -v ^$ '
subprocess.call(cmd, shell=True, universal_newlines=True, stdin=subprocess.PIPE)
输出:
物理id:0核心id:0物理id:0核心id:0您只需要再逃避一次
\\\n
或将sed命令用引号括起来sed-e's/ph/\\nPH/g\
。您不应将cat
与能够读取数据的程序一起使用,如egrep
、awk
等。您可以更改此cat/proc/cpuinfo | egrep“核心id”|物理id“;tr-d”\n| sed-es/ph/\\nPH/g | grep-v^$
toawk'/physical id/{f=$0}/core id/{print f,$0}'/proc/cpuinfo
Wow,太简单了。谢谢
import subprocess
cmd = 'cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed -e "s/ph/\\nPH/g" | grep -v ^$ '
subprocess.call(cmd, shell=True, universal_newlines=True, stdin=subprocess.PIPE)