저는 아직 vi/vim 사용자가 아닙니다. 저는 컴파일러가 대문자 키워드 사용을 요구하는 오래된 프로그래밍 언어를 배우고 있습니다. 한 학습 리소스에서는 vi/vim에게 일련의 키워드를 흡입하도록 요청하는 것을 제안합니다.
%s/\<import\>/IMPORT/g
%s/\<module\>/MODULE/g
명령 사용:그래서
그런 다음 현재 버퍼에 적용됩니다.
나는 같은 일을 할 수 있는 *nix 콘솔 유틸리티를 찾고 있습니다.
그러한 유틸리티가 존재합니까? 티아
답변1
Vim 명령이 포함된 파일이 있다고 가정하면 Vim 편집기의 옵션을 사용하여 이를 파일에 적용할 수 있습니다 -S
.
$ cat edits
%s/\<import\>/IMPORT/g
%s/\<module\>/MODULE/g
%s/\<bumblebee\>/BUMBLEBEE/g
%s/\<please\>/PLEASE/g
%s/\<for\>/FOR/g
%s/\<over\>/OVER/g
%s/\<do\>/DO/g
%s/\<done\>/DONE/g
wq
$ cat program
module top.
import "library".
for i over <zoidberg> -> do
bumblebee i:th, please.
done
$ vim -S edits program
$ cat program
MODULE top.
IMPORT "library".
FOR i OVER <zoidberg> -> DO
BUMBLEBEE i:th, PLEASE.
DONE
wq
파일의 마지막 파일은 edits
원본 파일과 동일한 파일 이름으로 문서를 저장합니다.
또한 이것은이상터미널에서 파일을 편집하는 방법이며, 일반적으로 다음과 같은 스트림 편집기를 사용합니다 sed
(아래 참조). 이것의 가장 큰 문제는 Vim이 비대화형 편집기가 아니며 편집 스크립트를 실행하기 전에 전체 문서를 메모리로 읽어온다는 것입니다(이것은우아하지 않은필요하지 않은 경우). 단순한 키워드 목록 대신 편집 스크립트를 유지해야 하는 것도 번거롭습니다.
한 줄에 키워드 하나씩 대문자로 변환해야 하는 일련의 소문자 키워드가 포함된 파일이 있다고 가정합니다.
간단한 Perl 프로그램은 목록을 sed
편집 스크립트로 변환합니다.
$ cat keywords
import
module
bumblebee
please
for
over
do
done
$ perl -pe 's{.*}{s/\L\\<$&\\>/\U$&\L/g}' keywords
s/\<import\>/IMPORT/g
s/\<module\>/MODULE/g
s/\<bumblebee\>/BUMBLEBEE/g
s/\<please\>/PLEASE/g
s/\<for\>/FOR/g
s/\<over\>/OVER/g
s/\<do\>/DO/g
s/\<done\>/DONE/g
Perl 코드가 하는 일은 각 줄을 가져와서 sed
표현식 에 삽입하는 것뿐입니다.
s/\<word\>/WORD/g
여기서 word
및 WORD
는 파일의 특정 줄에 대한 문자열입니다 keywords
. 먼저 소문자, 그 다음에는 대문자입니다.
그런 다음 이를 프로그램의 소스 코드에 적용할 수 있습니다.
$ cat program
module top.
import "library".
for i over <zoidberg> -> do
bumblebee i:th, please.
done
$ perl -pe 's{.*}{s/\L\\<$&\\>/\U$&\L/g}' keywords | sed -f /dev/stdin program
MODULE top.
IMPORT "library".
FOR i OVER <zoidberg> -> DO
BUMBLEBEE i:th, PLEASE.
DONE
를 사용하면 -f /dev/stdin
Perl sed
출력에서 편집 스크립트를 읽고 이를 지정된 파일(이 경우 이름이 파일 program
)에 적용할 수 있습니다.
이 간단한 단어 대체는 사용자 언어의 인용 규칙을 알지 못하므로 대체가 필요하지 않은 문자열 등에서 발견된 키워드를 대체합니다.
답변2
마찬가지로 대체 패턴으로 sed 파일을 사용한 다음 해당 sed 파일을 대상 텍스트에 적용할 수 있습니다.
다음은 샘플 sed 파일의 내용입니다.my_custom_substitutions.sed 위의 교체를 기반으로 :
s/\<import\>/IMPORT/g
s/\<module\>/MODULE/g
이러한 맞춤 대체품이 어떻게 보이는지 확인할 수 있습니다.앞으로실제로 다음과 같이 파일에 적용하십시오.
sed -f my_custom_substitutions.sed targetfile.txt
sed를 사용하여 이러한 사용자 정의 대체 항목을 대상 파일에 적용하려면 다음을 수행하십시오.
sed -i -f my_custom_substitutions.sed targetfile.txt
또 다른 접근 방식은 다음을 사용하는 것입니다 tr
.
echo "lower case text" | tr '[a-z]' '[A-Z]'
파일의 두 번째 줄에 대해 vim에서 이 작업을 수행하려면 다음을 수행할 수 있습니다.
:2 ! tr '[a-z]' '[A-Z]'
행 2에서 행 4 등의 범위에 있는 여러 행에 적용하려면 다음을 수행할 수 있습니다.
:2,4 ! tr '[a-z]' '[A-Z]'