sed 바꾸기 - 여러 파일의 텍스트 바꾸기

sed 바꾸기 - 여러 파일의 텍스트 바꾸기

여러 파일을 구문 분석하고 __esct 함수의 모든 항목을 어떻게 바꿀 수 있습니까?

__esct('Full name')   

로 변환하다:

$this->escape($this->translate('Full name'))  

대체 텍스트 뒤에 두 번째 중괄호를 추가하려면 어떻게 해야 합니까?

답변1

이것을 사용해 보세요:

sed 's@__esct(\(.*)\)@$this->escape($this->translate(\1)@'  file.txt

답변2

sed -e 's/__esct(\(.*\))/$this->escape($this->translate(\1))/'

당신을 꽤 멀리 데려다 줄 것입니다. 당신이 가지고 있다면 그것은 실패할 것이다foo(__esct('Some text'))

sed -e 's/__esct(\([^(]*\))/$this->escape($this->translate(\1))/'

이 사람들에게는 효과가 있지만 그 사람들에게는 실패합니다.__esct(foo('Some text'))

답변3

Perl에는 유사한 작업을 수행하기 위한 훌륭한 확장 기능이 있습니다.

perl -pi -e 's;__esct\(\'([a-zA-Z ]*)\'\);\$this->escape\(\$this->translate\(\'\1\'));g'  list of the files to mangle

원본 파일은 <file>.bak로 유지됩니다. 이는 vi(1)에서 작성하는 것처럼 각 행을 전역적으로 대체하는 것입니다. Perl에서는 () 등이 메타문자이고, 이를 일치시키려면 \( \)가 필요합니다.

[100% 확실하지 않습니다.', 이 경우 특정 쉘이 무엇을 하는지 확인해야 합니다. ]

관련 정보