2023. 4. 6. 02:44ㆍ리눅스 실제 사용 팁
작성일 : 2022. 10. 21. 01:07
1. Underscore to Camel Case
찾을 내용 : _(.)
바꿀 내용 : \U$1
노트패드++ 에서 통하는 방법이다. 다만, 저 방법을 적용하기 전에 우선 모두 소문자로 변환해야 한다.
그렇게 하지 않으면 요렇게 되지~~ (적용 전 : I_LOVE_SALSA, 적용 후 : ILOVESALSA)
모두 소문자로 변환하면 (전 : I_LOVE_SALSA, 후 : i_love_salsa)
하지만 거치는 과정이 다소 번거롭다. 이런 기능이 플러그인으로 존재한다면 감사히 편리하게 사용할텐데..
해설)
() 는 그룹(묶음)이다.
. 은 어느 한 문자 또는 숫자를 의미한다. 따라서 _(.) 는 I_LOVE_SALSA 에서 _L, _S 가 해당된다.
\U 는 뒤에 따라오는 문자를 알파벳 대문자로 변환한다.
$1 은 노트패드++ 에서 앞서 찾아낸 패턴에 해당하는 첫 번째 대상이다. (sed 에서는 \1 임)
sed 를 활용하는 방법 :
우선 대문자를 모두 소문자로 변환한다. ([[:alpha:]]) 로 알파벳 전체에 적용해도 된다.
그 다음에는 '_' 뒤에 오는 알파벳만 찾아서 대문자로 변환하면 된다.
$ echo I_LOVE_SALSA | sed -E 's/([[:upper:]])/\L\1/g'
[결과] i_love_salsa
$ echo I_LOVE_SALSA | sed -E 's/([[:upper:]])/\L\1/g' | sed -E 's/_(.)\B/\U\1/g'
[결과] iLoveSalsa
2. Camel Case to Underscore (Snake case)
아쉽지만 노트패드++ (의 Boost regular expression library) 에서 [[:upper:]] 같은 축약형 연산자를 지원하지 않는다.
그렇다고 그렇게 긴 패턴을 외울 수도 없는 노릇이고! (참고로 Stack Overflow 에서 관련 패턴을 찾을 수 있다)
따라서 리눅스 쉘 환경의 sed 에서 가능한 것만으로도 감사해야 한다. BASH 를 쓸 수 없는 환경이라면? 눈물이 앞을 가린다. 재야의 고수들은 다 방법이 있으리라! 없으면 VO 변수목록이 길 때 한 줄, 한 줄 "_" 를 붙이거나 그냥 DB 클라이언트에서 컬럼을 복사해와서 다시 정렬하거나 그대로 쓸 수 밖에...
찾을 내용 패턴 : \B([[:upper:]])
바꿀 내용 : _\U\1
해설)
\B 를 설명하기에 앞서 소문자 \b 를 먼저 설명하겠다. \b 는 (backspace 로 알고 있었으나 그게 아니고) boundary (경계) 를 의미한다. 경계에 붙어 있는 empty string(길이가 0인 문자열) 으로 표현하기도 한다.
대문자 \B 는 \b 의 반대이다. \B(패턴) 의 결과는 (패턴) 앞의 empty string 이다.
\U 는 뒤에 따라오는 문자를 uppercase, 즉 대문자로 변환한다.
\1 는 앞서 실행한 패턴에 해당하는 첫 번째 대상이다. sed 에서 sed 's/(패턴)/\U\1/' 을 실행하면 첫 번째 대상만 변경이 되는데 뒤에 global 을 의미하는 g 를 붙이면 패턴을 반복해서 적용할 수 있다. sed 's/(패턴)/\U\1/g'
sed 를 활용한 사용방법 :
CamelCase 에서 Snake case 로 변환할 때 알파벳 대문자를 기준으로 앞에 "_" 를 붙이기 때문에
뒤에 따라오는 문자들은 대문자로 변환되지 않고 소문자로 남는다.
따라서 파이프를 통해서 sed 에서 다시 전체를 대문자로 변환시키는 작업을 한 번 더 해주어야 한다.
$ echo iLoveSalsa | sed -E 's/\B([[:upper:]])/_\1/g'
[결과] i_Love_Salsa
$ echo ILoveSalsa | sed -E 's/\B([[:upper:]])/_\1/g' | sed -E 's/([a-zA-Z].*)/\U\1/g'
[결과] I_LOVE_SALSA
또는
$ echo ILoveSalsa | sed -E 's/\B([[:upper:]])/_\1/g' | sed -E 's/([[:alpha:]].*)/\U\1/g'
[결과] I_LOVE_SALSA
'리눅스 실제 사용 팁' 카테고리의 다른 글
[리눅스] 로그인 계정 - 콘솔 영/한 로케일 설정 (0) | 2023.04.06 |
---|---|
[리눅스] CentOS - 네트워크 켜기 (0) | 2023.04.06 |
find -exec {} 파이프로 넘기기 (0) | 2023.04.06 |
[리눅스] 로딩시간 길어진 내 그놈 속도 올리기 (feat. Systemd) (0) | 2023.04.06 |
[리눅스] 넷플릭스 앱 설치하기 (0) | 2023.04.06 |