Je voudrais trouver un moyen de mettre en majuscule la première lettre d'un mot commençant par des chiffres.
Saisie:
sed -e 's/^\(.\)/\U\1/g'
Résultat attendu:
2019Donaldtrump 03012019Paris
Existe-t-il un moyen de modifier cette commande
2019donaldtrump 03012019paris
pour qu'elle recherche la première lettre réelle du mot? p >
Merci beaucoup
4 Réponses :
Cela semble faire ce que vous voulez dans mes tests:
sed -e 's/[[:digit:]][a-z]/\U\0/g' input.txt
Entrée:
2019Donaldtrump 03012019Paris
Sortie:
2019donaldtrump 03012019paris
Modifier: Comme indiqué par Toto , le regroupement n'est pas réellement nécessaire:
sed -e 's/\([[:digit:]]\)\([a-z]\)/\1\U\2/g' input.txt
Pas besoin de groupes, s / [[: digit:]] [a-z] / \ U \ 0 / g
fonctionne également.
One in awk:
$ awk 'BEGIN{FS=OFS=""}/^[0-9]/&&r=match($0,/[a-z]/){$r=toupper($r)}1' file
Résultat:
$ awk 'BEGIN { FS=OFS="" # separators to empty } /^[0-9]/ && match($0,/[a-z]/) { # if there is starting digit and lower case letters $RSTART=toupper($RSTART) # capitalize the first letter }1' file # output
Expliqué:
2019Donaldtrump 03012019Paris notstartingwith123
Plus court, car match
renvoie RSTART
comme valeur, stocke et utilise à la place:
$ awk 'BEGIN{FS=OFS=""}/^[0-9]/ && match($0,/[a-z]/){$RSTART=toupper($RSTART)}1' file
Avec GNU sed pour \U
:
$ sed 's/[[:alpha:]]/\U&/' file 2019Donaldtrump 03012019Paris
Cela donnera des majuscules pour toutes les chartes non alpha, même au début de la ligne. Op juste ce que le changement sur le texte après le numéro.
@Jotne Correct mais l'exemple d'entrée fourni par l'OP montre que toutes ses lignes contiennent 1 mot et qu'il commence par des chiffres suivis de minuscules. Je suppose que l'échantillon d'entrée publié est vraiment représentatif des données réelles des OP et qu'il n'y a donc aucun point à coder pour quelque chose qui n'existe pas dans l'entrée, surtout quand il y a beaucoup d'autres choses qui POURRAIENT être présentes dans l'entrée et que nous pouvons ' t rédigez des solutions pour tous.
Cela pourrait fonctionner pour vous (GNU sed):
sed 's/\<[[:digit:]]\+[[:alpha:]]/\U&/' file
Cela mettra en majuscule le premier caractère alphabétique d'un mot commençant par des chiffres.
Étant donné que tous les mots de votre exemple d'entrée commencent par des chiffres, je suppose que c'est également le cas dans vos données réelles.