En utilisant sed, comment pourrais-je remplacer deux motifs dans un motif plus grand sur une seule ligne ?
À partir d'une seule ligne de texte, je veux trouver un motif (appelons-le motif extérieur), puis remplacer deux motifs intérieurs par ce motif extérieur.
Voici un exemple d'une ligne de texte d'entrée :
Z:\source\private\main\developer\foo\setenv.sh(25): export 'FONTCONFIG_PATH'="$WINE_SHARED_SUPPORT/X11/etc/fonts"
Dans l'exemple ci-dessus, le motif extérieur est /^.*\([[:digit:]]+\):/
qui devrait être égal à Z:\source\private\main\developer\foo\setenv.sh(25):
Les deux modèles intérieurs sont /^[A-Za-z]:/
y /\\/
.
Une autre façon de formuler ma question est :
En utilisant sed Je sais comment effectuer des remplacements d'un motif en utilisant la fonction s
mais comment limiter la portée de la commande s
de sorte qu'elle ne fonctionne que sur la partie de la chaîne d'entrée jusqu'à l'élément (25):
?
Le résultat final que j'essaie d'obtenir est que la ligne de texte est transformée en ceci :
/enlistments/source/private/main/developer/foo/setenv.sh(25): export 'FONTCONFIG_PATH'="$WINE_SHARED_SUPPORT/X11/etc/fonts"