모든 대문자를 소문자로 변환하는 sed one-liner?


131

모든 단어로 일부 단어가 인쇄되는 텍스트 파일이 있습니다. 을 사용하여 텍스트 파일의 모든 것을 소문자로 변환하고 싶습니다 sed. 즉, 첫 번째 문장은 '모든 단어에 일부 단어가 인쇄 된 텍스트 파일이 있습니다.'라는 의미입니다.


6
당신은 tr명령 을 알고 있습니까? 때로는보다 더 적합합니다 sed.
— Bryan Oakley

@Bryan Oakley 저는 지금까지 없었습니다. 지적 해 주셔서 감사합니다. 그러나 내가 원하는 것을하기 위해 어떻게 사용합니까?
— 마그네 타

Raghuram의 답변에 제공된 링크를 살펴보십시오.
— Bryan Oakley

1
sed를 사용해야하는 경우 cat <input> | sed 'y / ABCDEFÑØÅÆŒ / abcdefñøåæœ /'<-대문자부터 소문자까지 모든 문자를 자세하게 설명해야합니다. 나는 모든 문자를 작성하는 것이 번거 롭다는 것을 알고 있지만 모든 국제 특수 문자와도 작동합니다. :)
— Arno Teigseth

답변:


248

로 tr:

# Converts upper to lower case 
$ tr '[:upper:]' '[:lower:]' < input.txt > output.txt

# Converts lower to upper case
$ tr '[:lower:]' '[:upper:]' < input.txt > output.txt

GNU를 사용하는 작품 sed(BSD sed는 지원하지 않습니다 \L \U) :

# Converts upper to lower case
$ sed -e 's/\(.*\)/\L\1/' input.txt > output.txt

# Converts lower to upper case
$ sed -e 's/\(.*\)/\U\1/' input.txt > output.txt

6
나는 단지 링크로 구성된 답변의 팬이 아니기 때문에 내 자신의 답변을 선택해야했습니다.
— 마그네트 라

6
OSX는 GNU 확장을 지원하지 않습니다 :(
— ekkis

2
sed -e 's/.*/\L&/' input.txt > output.txtGNU sed도 잘 작동합니다
— Asfand Qazi

1
@ekkis OSX는 BSD를 사용하고 있습니다 (언급 한 바와 같이 BSD sed는이를 지원하지 않습니다). man sed사용중인 버전을 확인 하려면 맨 위 줄을 읽으십시오 .
— Ryder

어떤 이유로 든 대문자 패턴을 사용하면 U모든 라인 앞에 추가 됩니다.
— Xtremefaith

51

GNU 확장이있는 경우 다음과 같이 sed의 \ L (전체 일치가 낮거나 \ L [lower] 또는 \ E [end-toggle casing off]에 도달 할 때까지)을 사용할 수 있습니다.

sed 's/.*/\L&/' <input >output

참고 : '&'는 전체 일치 패턴을 의미합니다.

참고로 GNU 확장은 \ U (위), \ u (다음 문자 일치), \ l (다음 문자 일치)입니다. 예를 들어, 당신이 문장을 낙타로 만들고 싶다면 :

$ sed -r 's/\w+/\u&/g' <<< "Now is the time for all good men..." # Camel Case
Now Is The Time For All Good Men...

참고 : 가정에 GNU 확장이 있다고 가정하므로 \ w (단어 문자)를 허용하고 캡처 괄호 및 하나 이상을 피할 필요가없는 dash-r (확장 정규식) 옵션을 사용할 수도 있습니다. 수량 자 (+). (제외 : \W [non-word], \s [whitespace], \S [non-whitespace]또한 대시-R에서 지원되지만 \d [digit]및 \D [non-digit]되지 않습니다.)


1
매우 유용한 팁. 낙타 사례에서 둥근 괄호가 필요하지 않다는 것을 알았습니다. 's / \ w + / \ u & / g'도 작동합니다.
— PJ_Finnegan

1
sed -ri 's/MATCH_WHATEVER/\L&/i' input-file.ext- /i수정자를 사용하면 대소 문자를 구분하지 않으므로 선택 사항입니다. -i스위치는 현재 위치에서 파일을 변경하기 위해 sed를 알려줍니다. 필요하지 않은 경우 출력을 다른 파일로 리디렉션 할 필요가 없습니다.
— Jim

1
나는 이것을 정말로 필요로했다 \E [end - toggle casing off]. 감사합니다 !
— Mehdi Yedes

37

awk다른 도구를 기꺼이 고려하려는 경우을 사용하여이 작업을 매우 쉽게 수행 할 수도 있습니다 .

echo "UPPER" | awk '{print tolower($0)}'

1
가장 좋은 대답은 키릴 문자로 작동하기 때문입니다. tr :-작동하지 않았다.
— Amaroc

2
악센트가있는 문자를주의하십시오. 예를 들어 tolower처리 할 수 ​​없음À
— Sam Houston

다음 명령을 사용하여 여러 파일의 이름을 바꿀 수 있습니다. ls | awk '{print "mv " $0 " " tolower($0)}' | sh
— Neekobus

15

다음은 많은 솔루션입니다.

Perl, tr, sed 및 awk를 사용하여 upercaser

perl -ne 'print uc'
perl -npe '$_=uc'
perl -npe 'tr/[a-z]/[A-Z]/'
perl -npe 'tr/a-z/A-Z/'
tr '[a-z]' '[A-Z]'
sed y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
sed 's/\([a-z]\)/\U\1/g'
sed 's/.*/\U&/'
awk '{print toupper($0)}'

Perl, tr, sed 및 awk로 소문자로

perl -ne 'print lc'
perl -npe '$_=lc'
perl -npe 'tr/[A-Z]/[a-z]/'
perl -npe 'tr/A-Z/a-z/'
tr '[A-Z]' '[a-z]'
sed y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
sed 's/\([A-Z]\)/\L\1/g'
sed 's/.*/\L&/'
awk '{print tolower($0)}'

복잡한 bash와 소문자 :

while read v;do v=${v//A/a};v=${v//B/b};v=${v//C/c};v=${v//D/d};v=${v//E/e};v=${v//F/f};v=${v//G/g};v=${v//H/h};v=${v//I/i};v=${v//J/j};v=${v//K/k};v=${v//L/l};v=${v//M/m};v=${v//N/n};v=${v//O/o};v=${v//P/p};v=${v//Q/q};v=${v//R/r};v=${v//S/s};v=${v//T/t};v=${v//U/u};v=${v//V/v};v=${v//W/w};v=${v//X/x};v=${v//Y/y};v=${v//Z/z};echo "$v";done

복잡한 bash 대 대문자 :

while read v;do v=${v//a/A};v=${v//b/B};v=${v//c/C};v=${v//d/D};v=${v//e/E};v=${v//f/F};v=${v//g/G};v=${v//h/H};v=${v//i/I};v=${v//j/J};v=${v//k/K};v=${v//l/L};v=${v//m/M};v=${v//n/N};v=${v//o/O};v=${v//p/P};v=${v//q/Q};v=${v//r/R};v=${v//s/S};v=${v//t/T};v=${v//u/U};v=${v//v/V};v=${v//w/W};v=${v//x/X};v=${v//y/Y};v=${v//z/Z};echo "$v";done

간단한 bash ~ 소문자 :

while read v;do echo "${v,,}"; done

대문자로 간단한 bash :

while read v;do echo "${v^^}"; done

$ {v,} 및 $ {v ^}는 첫 글자 만 변경합니다.

당신은 그런 식으로 사용해야합니다 :

(while read v;do echo "${v,,}"; done) < input_file.txt > output_file.txt


5

나는 여기에 대한 답변 중 일부를 좋아하지만 모든 플랫폼에서 트릭을 수행 해야하는 sed 명령이 있습니다.

sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'

어쨌든 이해하기 쉽습니다. 그리고 y 명령에 대해 아는 것이 때때로 유용 할 수 있습니다.


2
이것은 임의의 국제 문자에는 작동하지 않지만 OS / X의 ASCII 문자에는 작동합니다.
— emrys57

그것은 확실히 나를 위해 일을했다. y 명령을 처음 사용한 것을 인정해야합니다. 감사!
— monsune

4

posix sed를 사용하는 경우

패턴의 경우에 대한 선택 (regex를 사용하여 원하는 명령에서 변환 된 패턴을 사용하는 것보다이 패턴으로 검색된 패턴을 변환하는 경우)

echo "${MyOrgPattern} | sed "s/[aA]/[aA]/g;s/[bB]/[bB]/g;s/[cC]/[cC]/g;s/[dD]/[dD]/g;s/[eE]/[eE]/g;s/[fF]/[fF]/g;s/[gG]/[gG]/g;s/[hH]/[hH]/g;s/[iI]/[iI]/g;s/[jJ]/[jJ]/g;s/[kK]/[kK]/g;s/[lL]/[lL]/g;s/[mM]/[mM]/g;s/[nN]/[nN]/g;s/[oO]/[oO]/g;s/[pP]/[pP]/g;s/[qQ]/[qQ]/g;s/[rR]/[rR]/g;s/[sS]/[sS]/g;s/[tT]/[tT]/g;s/[uU]/[uU]/g;s/[vV]/[vV]/g;s/[wW]/[wW]/g;s/[xX]/[xX]/g;s/[yY]/[yY]/g;s/[zZ]/[zZ]/g" | read -c MyNewPattern
 YourInputStreamCommand | egrep "${MyNewPattern}"

소문자로 변환

sed "s/[aA]/a/g;s/[bB]/b/g;s/[cC]/c/g;s/[dD]/d/g;s/[eE]/e/g;s/[fF]/f/g;s/[gG]/g/g;s/[hH]/h/g;s/[iI]/i/g;s/j/[jJ]/g;s/[kK]/k/g;s/[lL]/l/g;s/[mM]/m/g;s/[nN]/n/g;s/[oO]/o/g;s/[pP]/p/g;s/[qQ]/q/g;s/[rR]/r/g;s/[sS]/s/g;s/[tT]/t/g;s/[uU]/u/g;s/[vV]/v/g;s/[wW]/w/g;s/[xX]/x/g;s/[yY]/y/g;s/[zZ]/z/g"

대문자와 동일 // sed에서 소문자를 // 소문자로 바꿉니다.

즐기세요


(이것은 MacOS에서 가장 잘 작동한다는 것을 알았습니다.)-Nice, 내 친구-작은 토포-Jj 케이스가 거꾸로 있습니다. "s / [aA] / a / g; s / [bB] / b / g; s / [cC] / c / g; s / [dD] / d / g; s / [eE] / e / g; s / [fF] / f / g; s / [gG] / g / g; s / [hH] / h / g; s / [iI] / i / g; s / [jJ] / j / g; s / [kK] / k / g; s / [1L] / l / g; s / [mM] / m / g; s / [nN] / n / g; s / [oO] / o / g; s / [pP] / p / g; s / [qQ] / q / g; s / [rR] / r / g; s / [sS] / s / g; s / [tT] / t / g; s / [uU] / u / g; s / [vV] / v / g; s / [wW] / w / g; s / [xX] / x / g; s / [yY] / y / g; s / [zZ] / z / g "
— Neil McGill 2016 년

왜 그렇게 노동 집약적 인 일을해야하는지 잘 모르겠습니다. Mac OS에 GNU 확장 기능이 없다고 가정하지만 sed를 사용하지 않고 대체 ( 's') 대신 음역 ( 'y')을 사용할 수 있습니다 : sed 'y / ABCDEFGHIJKLMNOPQRSTUVWXYZ / abcdefghijklmnopqrstuvwxyz / '
— Luv2code

목표는 데이터 소스의 내용을 변경하지 않고 (소스 y//의 내용을 변경하거나 패턴 검색을 놓칠 수 있는) GNU 비 sed에서 소문자 / 대문자처럼 보이는 텍스트 패턴을 선택하는 것이 었습니다 .
— NeronLeVelu

3

짧고 달콤하며 리디렉션이 필요하지 않습니다 :-)

perl -p -i -e 'tr/A-Z/a-z/' file

Hah, 나는 이것을 뒤에서 살펴 보았고 어떻게 든 내 파일의 모든 문자를 다른 임의의 대문자로 대체했습니다. 어쨌든 나에게 좋은 웃음을 주었다. 나는 perl에 대해서도이
— ThorSummoner
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.