sedワンライナーですべて大文字に変換しますか?


131

一部の単語がすべて大文字で印刷されたテキストファイルがあります。私はちょうど使用して、小文字にテキストファイルのすべてを変換することができるようにしたいですsed。つまり、最初の文は、「一部の単語がすべて大文字で印刷されたテキストファイルがあります。


6
trコマンドを知っていますか?時々それはより適切ですsed
Bryan Oakley、2010

@ブライアンオークリー私は今までなかった。指摘してくれてありがとう。しかし、それをどのように使用して私が求めていたことを行うのですか?
マグネター2011年

Raghuramの回答に記載されているリンクをご覧ください。
ブライアンオークリー

1
sedを使用する必要がある場合は、cat <input> | sed 'y /ABCDEFÑØÅÆŒ/abcdefñøåæœ/' <-すべての文字を大文字から小文字に詳述する必要があります。これらの文字をすべて書くのは面倒ですが、国際的なSPECIAL文字もすべて機能します。:)
Arno Teigseth 2013年

回答:


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 2017

1
@ekkis OSXはBSDを使用しています(前述のとおり、BSD sedはBSDをサポートしていません)。の一番上の行を読んで、man sed使用しているバージョンを確認してください。
ライダー

何らかの理由で大文字のパターンを使用するとU、すべての行の前にが追加されます
Xtremefaith

51

GNU拡張機能がある場合は、次のようにsedの\ L(一致全体の下位、または\ L [下位]または\ E [終了-大文字/小文字の切り替えをオフ]に達するまで)を使用できます。

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拡張機能があることを前提としているため、ダッシュ-r(拡張正規表現)オプションを使用することもできます。これにより、\ w(単語文字)が許可され、括弧を1つ以上エスケープする必要がなくなります。数量詞(+)。(別に:\W [non-word], \s [whitespace], \S [non-whitespace]また、ダッシュ-Rでサポートされるが、\d [digit]\D [non-digit]されません。)


1
非常に役立つヒント。キャメルケースの例では丸括弧が不要であることがわかりました。's / \ w + / \ u&/ g'も機能します。
PJ_Finnegan 2015

1
sed -ri 's/MATCH_WHATEVER/\L&/i' input-file.ext- /i修飾子を使用すると、一致で大文字と小文字が区別されなくなり、オプションになります。-iスイッチは、インプレースファイルを変更するためにsedを指示します。必要がなければ、出力を別のファイルにリダイレクトする必要はありません。
ジム

1
私は本当にこれが必要でした\E [end - toggle casing off]。ありがとうございました !
Mehdi Yedes

37

awk別のツールを検討したい場合は、でもこれを非常に簡単に行うことができます。

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

1
その最良の答えは、キリル文字で動作するためです。tr:-動作しませんでした。
Amaroc

2
アクセントのある文字に注意してください。たとえばtolower、処理できないÀ
サムヒューストン

あなたは、そのコマンドでファイルの束の名前を変更することができます 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コマンドを使用したことを認めなければなりません。ありがとう!
モンスーン

4

posix sedを使用している場合

パターンの大文字と小文字の選択(このsedを使用して検索されたパターンを変換し、正規表現を使用したコマンドで変換されたパターンを使用する:

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で最もうまく機能したことを発見しました)-ニース、私の友人-しかし小さなトポ-あなたはJj事件を逆に持っています。sed [[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 / [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 "
Neil McGill、2015年

なぜ労働集約的なことをする必要があるのか​​わかりません。私はMac OSにGNU拡張機能がないと想定していますが、sedの代わりに置換( 's')の代わりにsedを使用する場合は、次のように文字変換( 'y')を使用できます:sed 'y / ABCDEFGHIJKLMNOPQRSTUVWXYZ / abcdefghijklmnopqrstuvwxyz / '
Luv2code

目的は、データソースのコンテンツを変更せずに、GNU以外のsedから小文字/大文字のように見えるテキストパターンを選択することでした(ソースy//のコンテンツを変更するか、パターン検索を逃す可能性があります
。–

3

短くて甘い、そしてリダイレクトさえ必要ない:-)

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

ああ、まあ私は後ろ向きでこれを使用しようとしました、そしてそれはどういうわけか私のファイルのほとんどすべての文字を他のランダムな大文字に置き換えました。とにかく笑ってくれた。perlについても、この回答から欲しいものを引き出すことができました。askubuntu.com
a
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.