예시(임의) 텍스트:
[email protected]:Portuguesa-Span103
[email protected]
[email protected]:Sanchismo103
원하는 출력:
[email protected]:Portuguesa-Span103
[email protected]
[email protected]:Sanchismo103
일반적으로 이것은 제가 사용하는 이메일 주소 정규식입니다.
[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}
각 줄의 형식에 관계없이 모든 이메일 주소를 찾아 간단히 소문자로 만드는 명령을 원합니다. 나머지 줄은 여전히 대문자로 유지합니다(이메일 주소 외에는 아무것도 변경되지 않았습니다).
이것을 사용하기 위해 제가 선호하는 도구는 bash(및 관련 도구)입니다. 어디서부터 시작해야 할지 모르기 때문에 아직 직접 시도해 보지 않았습니다.
저는 Gnu/Cygwin을 사용하고 있습니다.
답변1
GNU sed를 사용하면 다음을 사용할 수 있습니다.
sed -e 's/^\([^@]*\)@/\L\1@/' file
이렇게 하면 줄의 시작 부분부터 첫 번째 @
줄까지 모든 내용이 소문자로 변환됩니다. 예를 들어
$ sed -e 's/^\([^@]*\)@/\L\1@/' input.txt
[email protected]:Portuguesa-Span103
[email protected]
[email protected]:Sanchismo103
이메일 주소가 각 줄의 시작 부분에 있지 않거나 한 줄에 여러 개의 이메일 주소가 있을 수 있는 경우 \b
대신 ^
검색을 고정하고 시작 줄 대신 단어 경계 태그로 바꿀 수 있습니다.
sed -e 's/\b\([^@]*\)@/\L\1@/g' input.txt
답변2
사용하는 정규식이 항상 정확하다면 Perl과 함께 사용할 수 있습니다.
% perl -pe 's/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}/\L$&/' foo
[email protected]:Portuguesa-Span103
[email protected]
[email protected]:Sanchismo103
$&
일치하고 그 뒤의 모든 항목을 소문자로 만드는 텍스트입니다 \L
(최대 a \E
이지만 여기서는 필요하지 않음).