파일 내용을 소문자로 변환

파일 내용을 소문자로 변환

temp소문자와 대문자 내용이 포함된 파일이 있습니다 .

입력하다

내 파일의 내용 temp:

hi
Jigar
GANDHI
jiga

다 변환하고 싶어요위에서 아래로.

주문하다

다음 명령을 시도했습니다.

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

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

산출

나는 그것이되기를 원합니다 :

hi
jigar
gandhi
jiga

필요한 것바꾸다논쟁의 일부 sed?

답변1

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

tr A-Z a-z < input 

또는 (IMO를 기억하고 입력하기가 덜 쉽지만 ASCII 라틴 문자로 제한되지는 않지만 GNU를 포함한 일부 구현에서는 tr여전히 단일 바이트 문자로 제한되므로 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

답변2

vim을 사용하면 매우 쉽습니다.

$ vim filename
gg0guGZZ

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

그것은 당신이 던지는 모든 것을 처리할 수 있어야 하며, 숫자는 무시하고 비ASCII도 처리할 것입니다.

반대로 하고 싶다면 소문자를 대문자로 바꾸고 : u로 바꾸면 됩니다 .Ugg0gUGZZ

답변3

나는 dd이것을 좋아한다.

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

...얻다...

hi
jigar
ghandi
jiga

이는 LC_ALL=C입력의 모든 멀티바이트를 보호하기 위한 것입니다. 단, 멀티바이트 대문자는 변환되지 않습니다. ~을 위한(암소 비슷한 일종의 영양) tr- 두 응용 프로그램 모두 C가 아닌 로케일에서 입력이 손상되기 쉽습니다. iconv이들 중 하나와 결합하여 포괄적인 솔루션을 구성할 수 있습니다.

리디렉션 2>/dev/null폐기 에 대한 기본 상태 보고 dd및 해당 stderr. 이것이 없으면 dd위의 작업이 완료되고 처리된 바이트 수 등과 같은 정보가 인쇄됩니다.

답변4

일치하는 패턴을 캡처한 다음 수정자로 교체하는 데 사용해야 합니다.

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

둘러싸는 일치하는 텍스트를 "캡처 \(...\)"합니다. 첫 번째 캡처는 으로 \1, 다음 캡처는 으로 이동합니다 \2. 중첩된 캡처의 경우 왼쪽 괄호를 기준으로 번호가 매겨집니다.

\L캡처된 패턴을 소문자 및 대문자로 변환합니다 \U.

관련 정보