Je voudrais changer les modèles suivants:
getFoo_Bar
à:
getFoo_bar
(notez le b inférieur)
Ne connaissant ni foo ni barre, quel est le modèle de remplacement?
J'ai commencé à écrire
sed 's/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1
mais je suis coincé: je veux écrire "\ 2 minuscules", comment puis-je faire cela?
Peut-être que sed n'est pas adapté?
s/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1\L\2/g
Tester:
$ echo 'getFoo_Bar' | sed -e 's/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1\L\2/g'
getFoo_bar
Pour modifier getFoo_Bar en getFoo_bar à l'aide de sed:
echo "getFoo_Bar" | sed 's/^\(.\{7\}\)\(.\)\(.*\)$/\1\l\2\3/'
Les lettres majuscules et minuscules sont gérées par:
\U
Met tout le texte en majuscule à droite.\u
fait que le premier caractère à la droite majuscule.\L
Met tout le texte en bas à droite.\l
Ne met que le premier caractère en minuscule à droite. (Notez que c'est une lettre minuscule L)L'exemple n'est qu'une méthode de correspondance de modèle, basée sur la modification d'un seul bloc de texte. En utilisant l'exemple, getFoo_BAr se transforme en getFoo_bAr, notez que le A n'a pas été modifié.
Un peu plus court:
echo getFoo_Bar | sed 's/_\(.\)/_\L\1/'
Le plus court je peux venir avec:
echo getFoo_Bar | sed 's/_./\L&/'
Vous pouvez utiliser Perl pour celui-ci:
Perl -pe 's/(get[A-Z][A-Za-z0-9]*)_([A-Z])/\1_\l\2/'
Le\l est le truc ici.
sed ne fait pas de majuscules/minuscules sur les groupes correspondants.
Si vous voulez tout écrire en minuscule juste après le trait de soulignement, cela fonctionnera pour vous:
echo getFoo_Bar | gawk -F_ '{print tolower($2)}'