Convertit le contenu du fichier en minuscules

Jai un fichier temp avec un contenu en minuscules et en majuscules.

Entrée

Contenu de mon fichier temp:

 hi Jigar GANDHI jiga  

Je souhaite convertir tout supérieur en inférieur .

Commande

Jai essayé la commande suivante:

sed -e "s/[A-Z]/[a-z]/g" temp 

mais jai obtenu une mauvaise sortie.

Sortie

Je le veux comme:

hi jigar gandhi jiga 

Ce qui doit être dans la partie substitut de largument pour sed?

Commentaires

Réponse

Si votre entrée ne contient que des caractères ASCII, vous pouvez utiliser tr comme:

ou (moins facile à retenir et à taper IMO; mais pas limité aux lettres latines ASCII, bien que dans certaines implémentations, y compris GNU tr, toujours limité aux caractères à un octet, donc dans les paramètres régionaux UTF-8, toujours limité aux lettres ASCII):

tr "[:upper:]" "[:lower:]" < input 

si vous devez utiliser sed:

sed "s/.*/\L&/g" < input 

(ici en supposant limplémentation GNU).

Avec POSIX sed, vous « auriez besoin de spécifier toutes les translittérations et ensuite vous pourrez choisir lesquelles lettres à convertir:

sed "y/AǼBCΓDEFGH.../aǽbcγdefgh.../" < input 

Avec awk:

awk "{print tolower($0)}" < input 

Commentaires

  • Veuillez noter que \L est une extension GNU.
  • \L fonctionne bien pour moi jusquà présent. Sachez que vous essayez de créer une extension GNU
  • @JigarGandhi. sed est une commande Unix. Différents systèmes ont différentes variantes avec un comportement différent d fonctionnalité. Heureusement, de nos jours, il existe ‘ une norme à laquelle la plupart sont conformes afin que vous puissiez compter sur un ensemble minimum de fonctionnalités communes à tous. \L nen fait pas partie et a été introduit par GNU sed (correspond au même opérateur dans la norme ex / vi) et nest généralement pas disponible dans dautres implémentations.
  • Notez que certaines implémentations tr comme GNU tr don ‘ t fonctionne correctement dans les paramètres régionaux multi-octets (la plupart sont de nos jours, essayez echo STÉPHANE | tr '[:upper:]' '[:lower:]' par exemple). Sur les systèmes GNU, vous pouvez préférer la variante sed ou awk ‘ s tolower().
  • Légère correction: sed 's/.*/\L&/g' < input. La \1 référence à la sous-chaîne correspondante ne fonctionnera ‘ que si vous spécifiez la sous-chaîne entre parenthèses comme le fait wurtle dans la sienne. Cependant, il est ‘ légèrement plus propre dutiliser & pour représenter la correspondance entière, comme indiqué

Réponse

En utilisant vim, cest super simple:

$ vim filename gg0guGZZ 

Ouvre le fichier, gg va à la première ligne, 0, première colonne. Avec guG , réduit la casse de tous les caractères jusquau bas du fichier. ZZ enregistre et quitte.

Il devrait gérer à peu près tout ce que vous lui lancez; il « ll ignorera les nombres, il » traitera les nombres non ASCII.

Si vous vouliez faire le contraire, mettez les lettres minuscules en majuscules, permutez les u pour un U: gg0gUGZZ et vous « êtes prêt.

Commentaires

  • Lol  » super simple  »
  • cela ne fait évidemment pas ‘ t bien dimensionner pour de nombreux fichiers
  • @CoreyGoldberg vim file1 file2 fileetc et quelque chose comme :bufdo gg0guG:w<CR> serait probablement fonctionne pour nimporte quel nombre de fichiers. Je nai pas testé cela cependant!
  • @TankorSmash qui ne ‘ t pas encore mis à léchelle à un grand nombre de fichiers

Réponse

Jaime dd pour cela, moi-même.

<<\IN LC_ALL=C 2<>/dev/null \ dd conv=lcase hi Jigar GANDHI jiga IN 

… obtient …

hi jigar ghandi jiga 

Le LC_ALL=C est de protéger tous les multi-octets en entrée – bien que les majuscules multi-octets ne soient pas converties. La même chose est vraie pour (GNU) tr – les deux applications sont susceptibles de modifier les entrées dans nimporte quelle locale non-C. iconv peut être combiné avec lun ou lautre pour une solution complète.

La redirection 2>/dev/null rejette le rapport détat par défaut de dd « – et son stderr. Sans lui dd suivrait lachèvement dun travail comme ci-dessus avec des informations dimpression telles que le nombre doctets traités, etc.

Commentaires

  • Cette solution est bien plus rapide que tr lors du traitement de gros fichiers, merci!

Réponse

Vous pouvez également utiliser Perl 5:

perl -pe "$_=lc" temp 

Loption -p indique perl pour exécuter lexpression spécifiée une fois pour chaque ligne dentrée, en imprimant le résultat, cest-à-dire la valeur finale de $_. -e indique que le programme sera le prochain argument, par opposition à un fichier contenant le script. lc convertit en minuscules. Sans argument, il fonctionnera sur $_. Et $_= lenregistre à nouveau pour quil soit imprimé.

Une variante de cela serait

perl -ne "print lc" temp 

Utilisation de -n est comme -p sauf que $_ ne sera « pas imprimé à la fin. Donc au lieu de sauvegarder dans cette variable, jinclus une instruction dimpression explicite.

Un avantage de Perl par rapport à sed est que vous navez pas besoin dextensions GNU. Il y a des projets qui doivent être compatibles avec des environnements non-GNU mais qui ont aussi déjà une dépendance Perl. Par rapport à tr, il se peut que Perl lc soit plus facilement sensible aux paramètres régionaux. Consultez la page de manuel perllocale pour plus de détails.

Réponse

Vous devez capturer le motif correspondant, puis utilisez-le dans le remplacement avec un modificateur:

sed "s/\([A-Z]\)/\L\1/g" temp 

Le \(...\) « capture » le englobant le texte correspondant, la première capture va à \1, la suivante à \2, etc. La numérotation se fait selon les crochets ouvrants en cas de captures imbriquées.

Le \L convertit le motif capturé en minuscules, il ya aussi \U pour les majuscules .

Commentaires

  • vous n’avez pas besoin de faire cela – le motif entier est toujours pris dans &
  • Cest vrai, mais jaurais raté loccasion dexpliquer la capture des correspondances 🙂

Réponse

Suite à la réponse de MvG », vous pouvez également utiliser Perl 6:

perl6 -pe .=lc temp

Ici $ _ est implicite, et vous navez pas besoin des guillemets simples pour le protéger de lexpansion par le shell ($ _ étant un paramètre spécial de Bash; voir: https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html )

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *