여러 파일을 구문 분석하고 __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% 확실하지 않습니다.', 이 경우 특정 쉘이 무엇을 하는지 확인해야 합니다. ]