一部の単語がすべて大文字で印刷されたテキストファイルがあります。 sed
を使用して、テキストファイル内のすべてを小文字に変換できるようにしたいと思います。つまり、最初の文は「すべての大文字でいくつかの単語が印刷されたテキストファイルを持っています」と読みます。
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
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拡張であるため、dash-r(拡張正規表現)オプションを使用することもできます。このオプションでは、\ w(Word文字)が許可され、キャプチャ括弧をエスケープする必要がなくなりますおよび1つ以上の量指定子(+)。 (脇:\W [non-Word], \s [whitespace], \S [non-whitespace]
もdash-rでサポートされていますが、\d [digit]
と\D [non-digit]
はサポートされていません。)
別のツールを検討する場合は、awk
を使用してこれを非常に簡単に行うこともできます。
echo "UPPER" | awk '{print tolower($0)}'
多くのソリューションがあります:
Perl、tr、sed、awkでアップカサーする
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
echo "Hello MY name is SUJIT " | sed 's/./\L&/g'
出力:
こんにちは私の名前はsujit
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の上位の同等のものに置き換えます
楽しんで
私はここでいくつかの答えが好きですが、どのプラットフォームでもトリックを実行するsedコマンドがあります:
sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'
とにかく、理解するのは簡単です。また、yコマンドについて知っていると便利な場合があります。
短く、甘く、リダイレクトさえ必要ありません:-)
Perl -p -i -e 'tr/A-Z/a-z/' file