다음 문자를 바꿔야 합니다.
à와 함께
â와 함께
와 나
ř와 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
끝에 있는 플래그는 모든 오류(패턴을 찾을 수 없음으로 인한)가 억제되고 파일 처리가 계속됨을 의미합니다.
|
명령 구분 기호입니다(파이프가 아님).
x
ex
파일에 기록할 변경 사항을 알려줍니다 (단, 파일이 있는 경우에만 해당).예변경)하고 종료합니다.
내부 파일 편집을 원할 경우 ex
이 도구를 선택하세요. 변경 사항을 적용하기 전에 미리 보려면 다음을 권장합니다.@gardenhead가 제안한 대로 사용됩니다 tr
.
(물론, 적절한 버전 제어 시스템(예: git)을 사용하는 경우 를 사용하여 적절하게 변경하고 를 ex
실행하여 파일을 이전 버전과 비교할 수 있습니다 git diff
.)
답변2
sed
tr
작동하지만 번역 문자를 사용하는 것이 훨씬 간단합니다.
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 1
with를 사용하세요. 입장find
*.php
man sed
더 많은 정보를 알고 싶습니다.
답변4
GUI 도구를 선호한다면 시도해 볼 수 있습니다제디트. 폴더(디렉토리) 검색을 포함하여 뛰어난 검색 및 바꾸기 기능을 갖추고 있습니다. 원하는 경우 정규식을 사용할 수 있습니다. Super Search는 결과와 함께 별도의 창을 띄웁니다.