안녕하세요. 팀에서 테이블 이름이 다음과 같은 상황에 처해 있습니다.
head_must_report
customer_report_sub_division
country_code_universe_nation_part
그러나 cut 명령을 사용하면 출력은 다음과 같아야 합니다. 참고: 테이블 이름은 밑줄로 구분됩니다.
HMR
CRSD
CCUNP
Bash 스크립트 사용
답변1
Perl이 없으면 sed
다음을 사용하세요 tr
.
> sed 's/\(.\)[^_]*_*/\1/g' /tmp/data | tr 'a-z' 'A-Z'
HMR
CRSD
CCUNP
답변2
perl -ple 's/(?:^|_)(.)[^_]*/\U$1/g'
이 Perl 명령은 표준 입력에서 행을 읽고 질문에서 언급한 규칙에 따라 변환합니다. s///
문자열 시작 부분이나 밑줄 문자 바로 뒤에 나타나는 모든 문자를 추출하고 대문자로 바꾸는 바꾸기 명령( )을 사용하여 이 작업을 수행합니다 . 위의 변형이 일치합니다.어느(.)
하지만 소문자만 일치 하도록 변경하여 ([a-z])
이를 제한 할 수도 있습니다 .
예:
$ echo yeah_seem_to_work | perl -ple 's/(?:^|_)(.)[^_]*/\U$1/g'
YSTW
답변3
perl
정규식을 사용하지 않고:
perl -lne 'print map {/./;uc $&} split /_/' test
Gnu sed
사용 \u
:
sed 's/_*\(.\)[^_]*/\u\1/g' test
Posix sed
:
sed 's/_*\(.\)[^_]*/\1/g;y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' test
Posix awk
( Gnu awk
, 및 으로 mawk
테스트됨 busybox awk
):
awk -F_ -v OFS="" '{for(i=1; i<=NF; i++) $i = toupper(substr($i, 1, 1))}1' test
python
(2 또는 3):
python -c '
import sys
print("".join([k[0].capitalize() for k in sys.argv[1].split("_")]))
' string
답변4
눈송이 때문에 그래
regexp_replace(table_name, '\(.\)\([^_]*_*\)', '\\1')