awk 또는 sed를 사용하여 모든 작은 단어(2-3자)를 대문자로 변환합니다.

awk 또는 sed를 사용하여 모든 작은 단어(2-3자)를 대문자로 변환합니다.

2-3개의 문자 단어를 모두 대문자로 써야 합니다. 1자 단어와 4자 이상의 단어는 동일하게 유지되어야 합니다.

입력하다:

cat Example
Dog
I
Fish
su
Su adm
Amd Cat ignore

예상 출력:

CAT Example
DOG
a
Fish
SU
SU ADM
ADM CAT ignore

답변1

GNU 사용sed

$ sed -E 's/\<[[:alpha:]]{2,3}\>/\U&/g' input_file
DOG
I
Fish
SU
SU ADM
AMD CAT ignore

답변2

대신 Perl을 사용하겠습니다.

$ perl -pe 's/\b\w{2,3}\b/uc($&)/eg' file
CAT Example
DOG
I
Fish
SU
SU ADM
AMD CAT ignore

파일에 UTF-8로 인코딩된 비ASCII 문자가 포함되어 있고 로케일에서 sté로 변환되어야 하는 문자열 과 같이 UTF-8을 문자 맵으로 사용하는 경우 STÉ다음을 사용하세요.

$ perl -C -pe 's/\b\w{2,3}\b/uc($&)/eg' file
CAT Example
DOG
I
Fish
SU
SU ADM
AMD CAT ignore
STÉ

답변3

awk의 솔루션은 다음과 같습니다.

awk '{ for (i=1; i<=NF; i++) { if (length($i) <= 3) { $i=toupper($i) } } }1' infile

답변4

사용행복하다(이전 Perl_6)

raku -pe 's:g/<?wb> \w**2..3 <?wb>/{$/.uc}/;'  

또는

raku -pe 's:g/<|w> \w**2..3 <|w>/{$/.uc}/;'  

또는

raku -pe 's:g/<< \w**2..3 >>/{$/.uc}/;' 

위의 Raku 코드는 @terdon의 Perl 코드를 상당히 직접적으로 번역한 것입니다. 단어 경계는 Raku <?wb>로 작성됩니다 <|w>. 이는 각각 <!wb>또는 로 부정될 수 있습니다 <!|w>. 마지막 예에서 왼쪽 단어 경계는 <<이고 오른쪽 단어 경계는 입니다 >>. Raku의 일치 변수는 이며 $/, 철자도 가능합니다 $<>.

대상 카테고리를 에서 \w또는 <alpha>심지어 (약어 ) <alnum>로 변경할 수 있습니다 .<:Letter><:L>알아채다: \w밑줄과 일치하지만 <alpha>및 그렇지 않습니다.<alnum><:Letter><:L>

위에 언급된 모든 클래스는 유니코드를 지원하므로 어떤 종류의 "대소문자 구분"도 문제가 되지 않습니다. 유니코드로 정의된 <:Ll>소문자 및/또는 유니코드로 정의된 대문자를 대상으로 <:Lu>하는 정규식을 작성할 수 있으며 .fc"foldcase" 루틴을 사용하여 문자를 비교할 수도 있습니다.

입력 예:

cat Example
Dog
I
Fish
su
Su adm
Amd Cat ignore
sté
a
Xa
Xb

예제 출력:

CAT Example
DOG
I
Fish
SU
SU ADM
AMD CAT ignore
STÉ
a
XA
XB
XSS

https://docs.raku.org/언어/regexes#Anchors
https://raku.org

관련 정보