sed une ligne pour convertir toutes les majuscules en minuscules?

j'ai un fichier texte dans lequel certains mots sont imprimés en majuscules. Je veux être en mesure de tout convertir dans le fichier texte en minuscules, en utilisant sed . Cela signifie que la première phrase se lise comme suit: "j'ai un fichier texte dans lequel certains mots sont imprimés en majuscules.

87
demandé sur Gonzalo Matheu 2010-12-31 14:31:10

8 réponses

avec 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

fonctionne avec GNU sed (BSD sed ne supporte pas \L \U ):

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

# Converts lower to upper case
$ sed -e 's/\(.*\)/\U/' input.txt > output.txt
167
répondu magnetar 2018-05-10 15:04:25

si vous avez des extensions GNU, vous pouvez utiliser le \L de sed (lower entire match, ou jusqu'à ce que \l [lower] ou \E [end-toggle tubing off] soit atteint), comme ceci:

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

Note: '& ' signifie le motif de correspondance complète.

comme note, les extensions GNU incluent \U (en haut), \u (en haut), \l (en bas). Par exemple, si vous souhaitez camelcase une phrase:

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

Note: Depuis l'hypothèse est que nous avons des extensions GNU, nous pouvons aussi utiliser l'option dash-r (extended regular expressions), qui permet \w (word character) et vous évite d'avoir à échapper à la saisie des parenthèses et d'un ou plusieurs quantificateurs (+). (Mis à part: \W [non-word], \s [whitespace], \S [non-whitespace] sont également supportés avec dash-r, mais \d [digit] et \D [non-digit] ne sont pas.)

29
répondu Luv2code 2015-06-27 15:14:58

vous pouvez également le faire très facilement avec awk , si vous êtes prêt à envisager un outil différent:

echo "UPPER" | awk '{print tolower("151900920")}'
27
répondu whitehat237 2012-09-21 17:15:23
echo  "Hello  MY name is SUJIT "  | sed 's/./\L&/g'

sortie:

hello  my name is sujit
7
répondu Sujit Dhamale 2016-12-27 08:57:10

voici plusieurs solutions :

À upercaser avec perl, tr, sed et 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/g'
sed 's/.*/\U&/'
awk '{print toupper("151900920")}'

en lettres minuscules avec perl, tr, sed et 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/g'
sed 's/.*/\L&/'
awk '{print tolower("151910920")}'

Bash compliqué à minuscule:

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

Compliqué bash en majuscules :

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 Simple minuscules :

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

bash Simple en majuscules :

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

Notez que ${v} et ${v^} seulement changer la première lettre.

Vous devriez l'utiliser de cette façon :

(while read v;do echo "${v,,}"; done) < input_file.txt > output_file.txt
6
répondu Vouze 2016-06-06 15:11:45

si vous utilisez posix sed""

sélection pour n'importe quel cas pour un modèle (conversion du modèle recherché avec ce sed que d'utiliser le modèle converti dans vous vouliez commande en utilisant 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}"

convertir en minuscules

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"

même pour la majuscule remplacer la lettre inférieure entre / / par l'équivalent supérieur dans le sed

Avoir du plaisir

5
répondu NeronLeVelu 2013-10-16 09:34:17

court, doux et vous n'avez même pas besoin de redirection :-)

perl -p -i -e 'tr/A-Z/a-z/' file
2
répondu pedrito 2014-05-13 15:42:01

j'aime certaines des réponses ici, mais il y a une commande sed qui devrait faire le tour sur la plateforme:

sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'

de toute façon, c'est facile à comprendre. Et savoir à propos de l'axe de commande peut être utile parfois.

1
répondu Dennis 2017-02-08 20:55:17