GNU/Linux >> Tutoriels Linux >  >> Linux

linux bash, chaîne de casse camel à séparer par un tiret

Je propose d'utiliser sed pour faire cela :

NEW=$(echo MyDirectoryFileLine        \
     | sed 's/\(.\)\([A-Z]\)/\1-\2/g' \
     | tr '[:upper:]' '[:lower:]')

UPD J'ai oublié de convertir en minuscules, code mis à jour


Vous pouvez utiliser s/\([A-Z]\)/-\L\1/g pour trouver une lettre majuscule et la remplacer par un tiret et sa minuscule. Cependant, cela vous donne un tiret au début de la ligne, vous avez donc besoin d'une autre expression sed pour gérer cela.

Cela devrait fonctionner :

sed --expression 's/\([A-Z]\)/-\L\1/g' \
    --expression 's/^-//'              \
    <<< "MyDirectoryFileLine"

Linux
  1. Utilisation d'une référence à une variable de chaîne Bash dans Sed ?

  2. Ignorer la casse dans glob() sous Linux

  3. Comment remplacer une chaîne dans plusieurs fichiers en ligne de commande Linux

  4. Que fait 'bash -c' ?

  5. Supprimez tous les caractères spéciaux et la casse de la chaîne dans bash

Commande d'historique sous Linux (historique de bash)

Comment utiliser bash if -z et if -n pour tester des chaînes sous Linux

Remplacement de chaîne dans Bash

Script Bash - Manipulation de chaînes

Bash Scripting - Déclaration de cas

Que faire en cas de panique du noyau Linux