파일 내용을 소문자로 변환 다음 명령을 시도했다 : sed -e

내가 가진 temp일부 소문자와 대문자 내용으로 파일.

입력

temp파일의 내용 :

hi
Jigar
GANDHI
jiga

모든 upper를 lower 로 변환하고 싶습니다 .

명령

나는 다음 명령을 시도했다 :

sed -e "s/[A-Z]/[a-z]/g" temp

그러나 출력이 잘못되었습니다.

산출

나는 그것을 원한다.

hi
jigar
gandhi
jiga

에 대한 논쟁 의 대체 부분에 무엇이 필요 sed합니까?



답변

입력에 ASCII 문자 만 포함 된 경우 다음 tr과 같이 사용할 수 있습니다 .

tr A-Z a-z < input 

또는 (쉽게 기억하고 IMO를 입력하십시오. 그러나 ASCII 라틴 문자로 제한되지는 않지만 GNU를 포함한 일부 구현 tr에서는 여전히 1 바이트 문자로 제한되므로 UTF-8 로켈에서는 여전히 ASCII 문자로 제한됩니다) :

tr '[:upper:]' '[:lower:]' < input

사용해야하는 경우 sed:

sed 's/.*/\L&/g' < input

(여기서는 GNU 구현을 가정).

POSIX sed를 사용하면 모든 음역을 지정하고 변환 할 문자를 선택할 수 있습니다.

sed 'y/AǼBCΓDEFGH.../aǽbcγdefgh.../' < input

awk:

awk '{print tolower($0)}' < input


답변

vim을 사용하면 매우 간단합니다.

$ vim filename
gg0guGZZ

파일을 gg열고 0첫 번째 줄인 첫 번째 열로갑니다. 을 사용 guG하면 파일 맨 아래까지 모든 문자의 대소 문자를 낮 춥니 다. ZZ저장하고 종료합니다.

그것은 당신이 던지는 모든 것을 처리해야합니다. 숫자를 무시하고 ASCII가 아닌 것을 처리합니다.

반대로하고 싶을 때는 소문자를 대문자로 바꾸고 : u를 바꾸십시오 U: gg0gUGZZ설정되었습니다.


답변

나는 이것을 좋아 dd한다.

<<\IN LC_ALL=C 2<>/dev/null \
dd conv=lcase
hi
Jigar 
GANDHI
jiga
IN

… 가져옵니다 …

hi
jigar
ghandi
jiga

LC_ALL=C입력의 모든 멀티 바이트를 보호하는 것입니다 – 어떤 멀티 바이트 자본은 변환되지 않습니다하지만. (GNU) 의 경우도 마찬가지입니다. tr두 앱 모두 C가 아닌 로캘에서 입력 조작이 발생하기 쉽습니다. iconv포괄적 인 솔루션을 위해 둘 중 하나와 결합 될 수 있습니다.

2>/dev/null리디렉션 파기 dd의 기본 상태 보고서 -과 표준 에러. 그렇지 않으면 dd처리 된 바이트 수 등과 같은 정보를 인쇄하는 위와 같은 작업이 완료됩니다.


답변

Perl 5를 사용할 수도 있습니다 :

perl -pe '$_=lc' temp

이 옵션 -p은 perl에게 각 입력 행에 대해 지정된 표현식을 한 번 실행하여 결과, 즉 최종 값을 인쇄하도록 지시합니다 $_. -e스크립트를 포함하는 파일과 달리 프로그램이 다음 인수가 될 것임을 나타냅니다. lc소문자로 변환합니다. 인수가 없으면에 작동합니다 $_. 그리고 $_=이 인쇄되는 있도록 다시 저장합니다.

그것의 변형은

perl -ne 'print lc' temp

결국에는 인쇄되지 않는 것을 제외하고 -n는 사용 하는 것과 같습니다 . 따라서 해당 변수에 저장하는 대신 명시적인 print 문을 포함시킵니다.-p$_

sed와 달리 Perl의 한 가지 장점은 GNU 확장이 필요하지 않다는 것입니다. 비 GNU 환경과 호환되어야하지만 이미 Perl asa 종속성이있는 프로젝트가 있습니다. 에 비해 trPerl lc을보다 쉽게 ​​로케일을 인식 할 수 있습니다. 자세한 내용은 perllocale매뉴얼 페이지를 참조하십시오.


답변

일치하는 패턴을 캡처 한 후 수정 자로 대체하여 사용해야합니다.

sed 's/\([A-Z]\)/\L\1/g' temp

\(...\)클로징 유사한 텍스트, 제 캡처 진행 “캡처” \1에 다음 \2중첩 캡처시 브래킷 개방에 따라 넘버링되는 등.

\L캡처 된 패턴을 소문자로 변환도 거기에 \U대문자를 위해.


답변

MvG의 답변 외에도 Perl 6을 사용할 수도 있습니다.

perl6 -pe .=lc temp

여기서 $ _는 암시 적이며 쉘로 확장되지 않도록 작은 따옴표가 필요하지 않습니다 ($ _는 특수 Bash 매개 변수입니다. https://www.gnu.org/software/bash/manual/ 참조). html_node / Special-Parameters.html )


답변