sed/perl 표현식을 Python 표현식으로 바꾸려면 어떻게 해야 합니까(일치하는 행만 변경하고 인쇄합니까)?

sed/perl 표현식을 Python 표현식으로 바꾸려면 어떻게 해야 합니까(일치하는 행만 변경하고 인쇄합니까)?

나는 물었다이 문제perl교체 방법을 알아보세요 sed.

이제 동일한 작업을 수행하는 다음 명령이 어떻게 보이는지 알고 싶습니다 python.

sed -n '/patternmatch/s%stuff%changed%p' file

perl -ne 'if ( /patternmatch/ ) { s%stuff%changed%; print }' file

한 줄로 쓸 수 있나요? 선택하다?

답변1

재미로:

python -c 'import sys,fileinput,re;sys.stdout.writelines(re.sub("stuff", "changed", l, 1) for l in fileinput.input() if re.search("patternmatch", l))' file

이러지 마세요 :) sed//를 사용하세요perlawk

답변2

간단한 예를 들어 보겠습니다. 파일을 고려하면 줄의 모든 번호를 문자열로 바꿀 것입니다 HELLO. 줄에 숫자가 없으면 그대로 두십시오.

#!/usr/bin/env python2
import re
with open('file.txt') as f:
    for line in f:
        if re.search(r'\d', line):
            print re.sub(r'\d', 'HELLO', line).rstrip('\n')
        else:
            print line.rstrip('\n')

시험:

$ cat file.txt 
foo bar test
spam 1 egg 5

$ python script.py 
foo bar test
spam HELLO egg HELLO

또한 다음을 사용하십시오 sed.

$ sed '/[[:digit:]]/s/[[:digit:]]/HELLO/g' file.txt 
foo bar test
spam HELLO egg HELLO

time통계를 확인해 보겠습니다 .

$ time sed '/[[:digit:]]/s/[[:digit:]]/HELLO/g' file.txt 
foo bar test
spam HELLO egg HELLO

real    0m0.001s
user    0m0.000s
sys 0m0.001s

$ time python script.py 
foo bar test
spam HELLO egg HELLO

real    0m0.017s
user    0m0.007s
sys 0m0.010s

보시다시피, 이 경우에는 기본 텍스트 처리 도구( sedawk)을 사용하는 것이 최선의 선택이 될 것입니다.

관련 정보