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.
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
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.)
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")}'
echo "Hello MY name is SUJIT " | sed 's/./\L&/g'
sortie:
hello my name is sujit
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
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
court, doux et vous n'avez même pas besoin de redirection :-)
perl -p -i -e 'tr/A-Z/a-z/' file
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.