2014-09-15 2 views
0

sed과 관련된 내 명령에 개행 문자가 있습니다.sed에서 개행 문자 처리하기. 명령은 파이썬에서 호출했습니다

시나리오는 다음과 같습니다. 내가 배쉬에서 다음 명령을 실행하면, 내가 얻을 : 당신이 볼 수 있듯이

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 명령은 NPH \ 산도 교체, 나는 각각의 '실제 ID에 대한 새로운 라인을 얻을 수 있도록. .. '

이제 파이썬에서이 bash 명령을 호출합니다. 다음은 모든 관련 라이브러리 가져 오기가 포함 된 코드의 작은 스 니펫입니다.

nPHysical id : 0core id  : 0nPHysical id : 0core id  : 1 

한 줄에 :

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) 

문제

내가 얻을 수 있다는 것입니다. '\ n'은 n으로 처리되지 않으며 PH 앞에 인쇄 된 것으로 보입니다.

출력을 멋지게 출력해야 나중에 라인을 계산하는 명령에 | sort | uniq | wc -l을 추가 할 수 있습니다.

Bash-and-Python 전문가의 도움을받을 수 있습니다.

감사합니다.

+0

탈출구에서 벗어나기 만하면됩니다. '\\\\ n' 또는 sed 명령을 인용 부호'sed -e \ 's/ph/\\ nPH/g \''로 둘러 쌉니다. –

+0

'egrep','awk'와 같이 데이터 자체를 읽을 수있는 프로그램에서'cat'을 사용해서는 안됩니다.'cat/proc/cpuinfo | egrep "코어 ID | 물리적 ID"| tr -d "\ n"| sed -e s/ph/\\ nPH/g | grep -v^$'를 awk/physical id/{f = $ 0}/core id/{print f, $ 0} '/ proc/cpuinfo'로 변경하십시오. – Jotne

답변

1

시도해보십시오 r은 의미

cmd = r'cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed -e s/ph/\\nPH/g | grep -v ^$ ' 

원시 문자열입니다. 일부 문자를 올바르게 이스케이프하지 못할 수도 있습니다.

+0

와우, 그렇게 간단합니다. 감사!! – shailenTJ

0

단순히위한 교체 명령을 둘러싸 쉼표 ("")가 올바르게 파이썬 구성 프로세스에 전달되도록하기로 나오지 :

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 : 0core ID : 0
물리적 id : 0core id : 0