여러 파일의 여러 문자열을 다른 문자열로 바꾸기

여러 파일의 여러 문자열을 다른 문자열로 바꾸기

여러 개의 텍스트 파일이 있습니다. 이러한 모든 텍스트 파일은 일련의 편집을 거쳐야 하며 vim이를 자동화하고 싶습니다. vim몇 가지 교체 명령이 있습니다. 텍스트 파일에 다음 대체 항목이 필요하다고 가정합니다.

  1. 소년을 소년으로 교체:%s/boy/Boy/g
  2. 소녀를 소녀로 교체:%s/girl/Girl/g
  3. 빈 줄을 제거합니다:g/^$/d

이것은 단순한 예일 뿐입니다. 이러한 모든 규칙을 작성한 다음 여러 파일에 대해 자동으로 수행하는 방법이 있습니까?

답변1

예, 이를 자동화하는 방법이 있습니다. 작업에 적합한 도구를 선택하는 것부터 시작됩니다.
이 경우 sed구부리려고 하는 대신 vi대화식 사용(자동화 아님)을 위해 설계되었습니다.

의 대체 구문은 sed기본적으로 의 대체 구문과 동일합니다 vi.

 sed -i.backup 's/boy/Boy/g' file-name-1 file-name-2 ...

답변2

Vim 스크립트(gvim, vim)는 우아하고 쉽게 적용할 수 있습니다.

vi -s edit.vim  test.txt

edit.vim에는 다음이 포함됩니다(:wq는 선택 사항).

:%s/boy/Boy/g
:%s/girl/Girl/g
:g/^$/d
:wq

그중 test.txt에는 다음이 포함됩니다.

boys & girls

boys & girls
boy & girl

boys & girls

이것은 "더러운" 텍스트 파일을 정리하기 위한 일반적인 vim 스크립트입니다.

:" clean.vim
:" clean up a text file
:" delete DOS returns (actually superfluous because of non-ASCII
deletion)
:%s/\r//eg
:" delete any non-ASCII including invisibles
:%s/[\x00-\x1f\x80-\xff]/ /eg
:" compress multiple spaces
:%s/\s\s\+/ /eg
:" delete end of line spaces
:%s/\s\+$//e
:" compress multiple blank lines
:v/./,/./-j
:" sort eliminating duplicate lines
:%sort -u

vim에서도 스크립트를 얻을 수 있다는 것을 기억하세요

:source clean.vim

답변3

왜 그것을 사용하지 않습니까 sed?

sed를 사용하면 디렉토리의 파일을 쉽게 반복할 수 있습니다.

for f in *.txt
do
sed 's/boy/Boy/g;s/girl/Girl/g;/^\s*$/d' $f > tmp
mv tmp $f
done

위의 예에서는 boy->Boy, girl->Girl을 변경하고 빈 줄을 제거합니다.

답변4

인라인 vi스크립트:

$ vi test.txt -c '%s/boy/Boy/g | %s/girl/Girl/g | g/^$/d | wq'

관련 정보