J'ai un fichier texte dans lequel certains mots sont imprimés en MAJUSCULES. Je veux pouvoir simplement convertir tout dans le fichier texte en minuscules, en utilisant sed
. Cela signifie que la première phrase se lirait alors: «J'ai un fichier texte dans lequel certains mots sont imprimés en majuscules».
131
tr
commande? Parfois, c'est plus approprié quesed
.Réponses:
Avec
tr
:Fonctionne avec GNU
sed
(BSDsed
ne prend pas en charge\L
\U
):la source
sed -e 's/.*/\L&/' input.txt > output.txt
pour GNU sed fonctionne bien aussiman sed
pour savoir quelle version vous utilisez.U
devant chaque ligneSi vous avez des extensions GNU, vous pouvez utiliser \ L de sed (correspondance entière inférieure, ou jusqu'à ce que \ L [lower] ou \ E [end - toggle casing off] soit atteint), comme ceci:
Remarque: «&» signifie le modèle de correspondance complet.
En remarque, les extensions GNU incluent \ U (supérieur), \ u (caractère suivant supérieur de la correspondance), \ l (caractère suivant inférieur de la correspondance). Par exemple, si vous vouliez camelcase une phrase:
Remarque: 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 de mot) et vous évite d'avoir à échapper la parenthèse de capture et un ou plusieurs quantificateur (+). (À part:
\W [non-word], \s [whitespace], \S [non-whitespace]
sont également pris en charge avec dash-r, mais\d [digit]
et\D [non-digit]
ne le sont pas.)la source
sed -ri 's/MATCH_WHATEVER/\L&/i' input-file.ext
- l'utilisation du/i
modificateur rend la correspondance insensible à la casse et est donc facultative. Le-i
commutateur indique à sed de modifier le fichier sur place. Pas besoin de rediriger la sortie vers un autre fichier si vous n'êtes pas obligé de le faire.\E [end - toggle casing off]
. Je vous remercie !Vous pouvez également le faire très facilement avec
awk
, si vous êtes prêt à envisager un outil différent:la source
tolower
ne sera pas en mesure de gérerÀ
par exemplels | awk '{print "mv " $0 " " tolower($0)}' | sh
Voici de nombreuses solutions:
Pour upercaser avec perl, tr, sed et awk
En minuscules avec perl, tr, sed et awk
Bash compliqué en minuscules:
Bash compliqué en majuscules:
Bash simple en minuscules:
Bash simple en majuscules:
Notez que $ {v,} et $ {v ^} ne modifient que la première lettre.
Vous devriez l'utiliser de cette façon:
la source
Production:
la source
J'aime certaines des réponses ici, mais il existe une commande sed qui devrait faire l'affaire sur n'importe quelle plate-forme:
Quoi qu'il en soit, c'est facile à comprendre. Et connaître la commande y peut parfois être utile.
la source
Si vous utilisez posix sed
Sélection dans tous les cas pour un modèle (en convertissant le modèle recherché avec ce sed, utilisez le modèle converti dans la commande souhaitée en utilisant regex:
convertir en minuscules
idem pour les majuscules remplacer la lettre inférieure entre // par l'équivalent supérieur dans le sed
S'amuser
la source
y//
changement du contenu de la source ou pourrait manquer la recherche de modèle.bref, doux et vous n'avez même pas besoin de redirection :-)
la source