내가 가진 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 종속성이있는 프로젝트가 있습니다. 에 비해 tr
Perl 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 )