vim 또는 sed를 사용하여 5개의 서로 다른 파일에서 ~60개의 인쇄 항목을 바꾸는 방법은 무엇입니까?

vim 또는 sed를 사용하여 5개의 서로 다른 파일에서 ~60개의 인쇄 항목을 바꾸는 방법은 무엇입니까?

Python 파일이 포함된 Fabfile(디렉토리):

print "DEBUG fab_helper DRYRUN: True"+var
print "DEBUG fab_helper DRYRUN: True"
#print "DEBUG cfn_stackname: "+cfn_stackname

도착하다:

LOGGER.DEBUG("DEBUG fab_helper DRYRUN: True"+var)
LOGGER.DEBUG("DEBUG fab_helper DRYRUN: True")
LOGGER.DEBUG("DEBUG cfn_stackname: "+cfn_stackname)

이 모든 항목을 내 로거 모듈로 어떻게 바꿀 수 있습니까? vim이나 sed를 사용해야 하나요?

답변1

2행의 누락과 3행의 중복이 )전사 오류라고 가정합니까?"

sed 's/^#*print \(.*\)/LOGGER.DEBUG(\1)/' ujjain
LOGGER.DEBUG("DEBUG fab_helper DRYRUN: True"+var)
LOGGER.DEBUG("DEBUG fab_helper DRYRUN: True")
LOGGER.DEBUG("DEBUG cfn_stackname: "+cfn_stackname)

답변2

awk '{$1="";print $0}' filename|sed "s/^/LOGGER.DEBUG\(/g"| sed "s/$/)/g"

산출:

LOGGER.DEBUG( "DEBUG fab_helper DRYRUN: True"+var)
LOGGER.DEBUG( "DEBUG fab_helper DRYRUN: True")
LOGGER.DEBUG( "DEBUG cfn_stackname: "+cfn_stackname)

답변3

Vim 사용: 모든 py 파일을 로드 vim *.py하고 다음을 수행합니다.

:bufdo %s/^ *#\?print \("DEBUG .*\)$/LOGGER.DEBUG(\1)/

이 명령은 로드된 각 파일에 대해 바꾸기 명령( )을 실행합니다 :bufdo. %s/...바라보다 :help :bufdo.

관련 정보