Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sed内处理换行;从Python调用的命令_Python_Regex_Bash_Sed_Subprocess - Fatal编程技术网

在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^$
to
awk'/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)