J'ai un fichier texte dans lequel certains mots sont imprimés en majuscule. Je veux pouvoir tout convertir dans le fichier texte en minuscule, en utilisant sed
. Cela signifie que la première phrase se lirait comme suit: "J'ai un fichier texte dans lequel certains mots sont imprimés en majuscules".
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\1/' input.txt > output.txt
# Converts lower to upper case
$ sed -e 's/\(.*\)/\U\1/' input.txt > output.txt
Si vous avez les extensions GNU, vous pouvez utiliser\L (correspondance complète inférieure, ou jusqu'à ce que\L [inférieur] ou\E [fin - basculement du boîtier] soit atteint)), comme suit:
sed 's/.*/\L&/' <input >output
Remarque: '&' signifie le modèle de correspondance complet.
En remarque, GNU incluent\U (supérieur),\u (caractère suivant supérieur de la correspondance),\l (caractère inférieur suivant de la correspondance). 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: Puisque l’hypothèse est que nous avons des extensions GNU, nous pouvons également utiliser l’option dash-r (expressions régulières étendues), qui autorise\w (caractère Word) et vous évite d’échapper la parenthèse de capture et le ou les quantificateurs (+) (en plus: \W [non-Word], \s [whitespace], \S [non-whitespace]
sont également pris en charge 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 autre outil:
echo "UPPER" | awk '{print tolower($0)}'
Voici plusieurs solutions:
Faire un 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\1/g'
sed 's/.*/\U&/'
awk '{print toupper($0)}'
En minuscule 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\1/g'
sed 's/.*/\L&/'
awk '{print tolower($0)}'
Bash compliqué en 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
Bash compliqué à majuscule:
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
Simple bash en minuscule:
while read v;do echo "${v,,}"; done
Simple bash en majuscule:
while read v;do echo "${v^^}"; done
Notez que $ {v,} et $ {v ^} ne modifient que 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
echo "Hello MY name is SUJIT " | sed 's/./\L&/g'
Sortie:
bonjour mon nom est sujit
Si vous utilisez posix sed
Sélection pour n'importe quel cas pour un motif (convertir le motif recherché avec ce sed puis utiliser le motif converti dans la commande que vous vouliez 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 minuscule
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"
idem pour les majuscules, remplacer la lettre inférieure entre // par son équivalent supérieur dans le sed
S'amuser
J'aime certaines des réponses ici, mais il y a une commande sed qui devrait faire l'affaire sur n'importe quelle plate-forme:
sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'
De toute façon, c'est facile à comprendre. Et connaître la commande y peut être utile parfois.
bref, doux et vous n'avez même pas besoin de redirection :-)
Perl -p -i -e 'tr/A-Z/a-z/' file