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
로 바꾸면 됩니다 .U
gg0gUGZZ
답변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
.