모든 대문자를 소문자로 변환하는 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.