J'ai des chaînes comme ci-dessous
VIN_oFDCAN8_8d836e25_Moto__data
Je veux insérer _Moto
entre les deux comme ci-dessous
echo VIN_oFDCAN8_8d836e25_In_data | sed 's/_In_*\(_data\)/_Moto_\1/'
Mais quand j'ai utilisé sed
avec le groupe de capture comme ci-dessous
VIN_oFDCAN8_8d836e25_In_Moto_data IPC_FD_1_oFDCAN8_8d836e25_In_Moto_data BRAKE_FD_2_oFDCAN8_8d836e25_In_Moto_data
J'obtiens la sortie comme:
VIN_oFDCAN8_8d836e25_In_data; IPC_FD_1_oFDCAN8_8d836e25_In_data BRAKE_FD_2_oFDCAN8_8d836e25_In_data
Pouvez-vous m'indiquer la bonne direction?
3 Réponses :
Bien que vous puissiez utiliser une simple substitution de la chaîne IN
(étant donné qu'elle n'est présente qu'une seule fois dans votre Input_file), mais puisque vous avez spécifiquement demandé la capture du style dans sed
, vous pouvez essayer de suivre alors.
sed 's/\(.*_In\)\(.*\)/\1_Moto\2/g' Input_file
Également ci-dessus ajoutera la chaîne _Moto
pour éviter d'ajouter 2 fois _
après Moto confusion, merci à @Bodo d'avoir mentionné la même chose dans les commentaires.
Problème avec la tentative d'OP: puisque vous ne gardez PAS _In_ *
en mémoire de sed code> donc il ne prend
\ (_ data_ \)
que comme première chose en mémoire, c'est la raison pour laquelle il ne fonctionne pas, je l'ai corrigé ci-dessus, nous devons tout garder jusqu'à _IN
en mémoire aussi et ensuite il volera.
Cela vaut peut-être la peine de mentionner un petit problème supplémentaire. Le script modifié ajoute _Moto
sans un _
de fin pour éviter les deux _
dans l'exemple de sortie VIN_oFDCAN8_8d836e25_Moto__data
@Bodo, merci de l'avoir fait savoir, ajouté dans ma réponse maintenant.
Dans votre cas, vous pouvez directement remplacer la chaîne correspondante par la commande ci-dessous
echo VIN_oFDCAN8_8d836e25_In_data | sed 's / _In_data / _In_Moto_data /'
$ sed 's/_[^_]*$/_Moto&/' file VIN_oFDCAN8_8d836e25_In_Moto_data IPC_FD_1_oFDCAN8_8d836e25_In_Moto_data BRAKE_FD_2_oFDCAN8_8d836e25_In_Moto_data
Quelque chose comme ça
peut-il écho VIN_oFDCAN8_8d836e25_In_data | sed 's / _In_data / _In_Moto_data /'
fonctionnera pour votre cas?