2
votes

REGEXP: Mettre en majuscule la première lettre d'un mot commençant par des chiffres

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


1 commentaires

É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.


4 Réponses :


5
votes

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


1 commentaires

Pas besoin de groupes, s / [[: digit:]] [a-z] / \ U \ 0 / g fonctionne également.



2
votes

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


0 commentaires

0
votes

Avec GNU sed pour \U :

$ sed 's/[[:alpha:]]/\U&/' file
2019Donaldtrump
03012019Paris


2 commentaires

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.



1
votes

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.


0 commentaires