OS X의 폴더에 있는 모든 .php 파일의 문자를 바꾸는 방법은 무엇입니까?

OS X의 폴더에 있는 모든 .php 파일의 문자를 바꾸는 방법은 무엇입니까?

다음 문자를 바꿔야 합니다.

à와 함께

â와 함께

와 나

ř와 s

ś과 t

대체 항목은 대소문자를 구분해야 합니다. 예를 들어 문자가 대문자인 경우 대문자로 바꿔야 합니다.

이 프로세스 에 사용할 수 있다는 내용을 읽었 sed지만 어떻게 사용하는지 모르겠습니다. 터미널에서 실행해야 하는 정확한 명령을 작성하는 데 도움을 줄 수 있는 사람이 있나요?

답변1

이러한 유형의 작업에 일반적으로 사용 되지만 sed실제로는 해당 작업을 위해 설계되지 않았습니다. 이름은 다음과 같습니다.개울편집하다.

이 도구는 비대화형용으로 설계되었습니다.문서편집은 ex.( vi"비주얼 편집기"의 한 형태입니다 ex.) 특히 파일을 그 자리에서 편집하려는 ex경우 sed.

이 경우 사용되는 명령은 sed이전에 제공된 명령과 거의 동일하지만 반드시 그럴 필요는 없습니다. 다음은 POSIX를 준수합니다(그리고 다릅니다 sed -i).

for file in *.php; do ex -sc '%s/[ăâ]/a/ge | %s/ș/s/ge | %s/ț/t/ge | %s/î/i/ge | x' "$file" ; done

설명하다:

-s일괄 처리를 준비하려면 "자동 모드"를 시작하십시오. -c실행할 명령을 지정합니다.

%파일의 모든 줄에 다음 명령을 적용한다는 의미입니다. 명령 s///은 매우 자명합니다. e끝에 있는 플래그는 모든 오류(패턴을 찾을 수 없음으로 인한)가 억제되고 파일 처리가 계속됨을 의미합니다.

|명령 구분 기호입니다(파이프가 아님).

xex파일에 기록할 변경 사항을 알려줍니다 (단, 파일이 있는 경우에만 해당).변경)하고 종료합니다.


내부 파일 편집을 원할 경우 ex이 도구를 선택하세요. 변경 사항을 적용하기 전에 미리 보려면 다음을 권장합니다.@gardenhead가 제안한 대로 사용됩니다 tr.

(물론, 적절한 버전 제어 시스템(예: git)을 사용하는 경우 를 사용하여 적절하게 변경하고 를 ex실행하여 파일을 이전 버전과 비교할 수 있습니다 git diff.)

답변2

sedtr작동하지만 번역 문자를 사용하는 것이 훨씬 간단합니다.

for file in *.php; do tr 'ăâîșțĂÂÎȘȚ' 'aaistaaist' < "${file}" > "translated_${file}"

해당 항목 ( 멀티바이트 문자를 지원하지 않는 OS/X sed가 아닌 GNU 시스템에 필요함 )은 다음과 같습니다.tr

sed 'y/ăâîșțĂÂÎȘȚ/aaistaaist/'

답변3

수식을 사용하여 문자를 바꿀 수 있습니다sed s/old_string/new_string/.

맨페이지에서:

sed - stream editor for filtering and transforming text

s/regexp/replacement/
              Attempt to match regexp against the pattern space.  If successful, replace that  portion  matched  with
              replacement.   The replacement may contain the special character & to refer to that portion of the pat‐
              tern space which matched, and the special escapes \1 through \9 to refer to the corresponding  matching
              sub-expressions in the regexp.

대체하려는 문자 세트가 있는 경우 replace.sed다음과 같이 대체 정의가 포함된 파일을 생성하는 것이 좋습니다(예:).

$ cat replace.sed
s/ă/a/g
s/â/a/g
s/î/i/g
s/ș/s/g
s/ț/t/g

그런 다음 다음과 같이 실행할 수 있습니다.

  • sed -f replace.sed < old.php > new.php

    지정된 문자를 replace.sed새 문자 로 바꾸고 old.php다음으로 출력합니다.new.php

  • sed -i -f replace.sed file.php

    file.php지정된 문자도 대체하는 대체 항목replace.sed

    맨페이지에서:

    -i[SUFFIX], --in-place[=SUFFIX]
    
                  edit files in place (makes backup if SUFFIX supplied)
    

또는 한 줄에 두 가지를 모두 정의할 수도 있습니다.

sed -e 's/ă/a/g' -e 's/â/a/g' -e 's/î/i/g' -e 's/ș/s/g' -e 's/ț/t/g'

모든 파일에 대해 이 작업을 수행하려면 .php다음과 유사한 명령을 사용할 수 있습니다.

  • find . -name "*.php" -exec sed -i '' -f replace.sed '{}' \;
  • for i in *.php; do sed -i '' -f replace.sed "$i"; done

참고: 위치를 현재 디렉터리로만 제한하려면 -maxdepth 1with를 사용하세요. 입장find*.phpman sed더 많은 정보를 알고 싶습니다.

답변4

GUI 도구를 선호한다면 시도해 볼 수 있습니다제디트. 폴더(디렉토리) 검색을 포함하여 뛰어난 검색 및 바꾸기 기능을 갖추고 있습니다. 원하는 경우 정규식을 사용할 수 있습니다. Super Search는 결과와 함께 별도의 창을 띄웁니다.

제딧 검색

관련 정보