sed - 세 번째 단어를 모두 대문자로 표기하는 방법은 무엇입니까?

sed - 세 번째 단어를 모두 대문자로 표기하는 방법은 무엇입니까?

반면:

main_east_library
main_west_roof
main_north_roof
minor_south_roof

sed(구체적으로 not 등) awk을 사용하여 tr다음을 생성하려면 어떻게 해야 합니까 ?

main_east_Library
main_west_Roof
main_north_Roof
minor_south_Roof

그것은 다음과 같습니다:

$ echo "main_west_library
main_west_roof
main_north_roof
minor_south_roof" | sed 's_\3_upcase(\3)_' 

이것이 제공하는 동안:

sed: -e expression #1, char 16: Invalid back reference

답변1

GNU 사용 sed:

sed -E 's/[[:alpha:]]+/\u&/3'

각 줄의 세 번째 문자 시퀀스를 대문자로 표시합니다.

수도모든각 줄의 세 번째 문자 순서:

sed -E 's/(([[:alpha:]]+[^[:alpha:]]+){2})([[:alpha:]]+)/\1\u\3/g'

세 글자 순서를 모두 대문자로 표기하세요.입력 내내, GNU 사용 awk:

awk -v RS='[^[:alpha:]]+' -v ORS= '
   NR % 3 == 0 {$0=toupper(substr($0,1,1)) substr($0,2)}
   {print $0 RT}'

또는 다음을 사용하여 perl:

perl -Mopen=locale -pe 's/\p{alpha}+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'

Perl의 문자 클래스는 유니코드 문자 속성을 기반으로 하지만 [[:alpha:]]일부 시스템에서는 문자 클래스가 다소 무작위일 수 있습니다(예를 들어 GNU 시스템에서는 많은 숫자를 포함하지만 아라비아 숫자(0123456789)는 포함하지 않음). \p{...}따라서 여기에는 \p{alpha}알파벳의 모든 문자는 물론 알파벳이 아닌 알파벳 문자도 포함됩니다.

발음 구별 부호 결합은 포함되지 않지만 유사한 단어가 Stéphane두 개의 별도 단어로 처리된다는 의미입니다.

따라서 다음을 수행할 수 있습니다.

perl -Mopen=locale -pe 's/[\p{alpha}\p{mark}]+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'

하지만 이는 너무 많은 내용을 포함하게 될 수도 있습니다.

또한 GNU와 달리 Perl은 (where is 1 하이픈 문자)와 같은 단어를 (2 문자 and)로 sed올바르게 변환합니다 .\ufiddleFiddleFi

답변2

진주

perl -pe 's/(?:.*?_){2}\K./\u$&/'

밑줄로 끝나는 일련의 2개 문자를 계산하고 다음 문자를 대문자로 표시합니다.

답변3

또 다른 GNU sed:

sed -E 's/([^[:alpha:]])([[:alpha:]])/\1\u\2/2'

이는 줄이 항상 단어로 시작한다고 가정합니다.

관련 정보