web-dev-qa-db-fra.com

Comment copier une partie d'une ligne sur une autre position

J'ai environ 100 déclarations d'impression dans un fichier comme celui-ci:

printf("%f \n\n",row1.req_pnttime);

Je veux copier le nom de la variable à l'intérieur de la chaîne pour qu'il devienne comme ceci

printf("row1.req_pnttime: %f \n\n",row1.req_pnttime);

Quelqu'un peut-il m'aider à faire ça?

PS-La longueur du nom de la variable est différente pour chaque instruction print. J'ai donc besoin d'un moyen générique pour le faire.

3
Vivek V K
sed 's/\(.*("\)\(.*,\)\(.*\))/\1\3: \2\3)/' /path/to/input.txt >/path/to/output.txt

Explication

  • Le format général est sed 's/find/replace/'. c'est-à-dire trouver une expression et la remplacer.
  • \( ... \) ce sont des groupes capturés. Ainsi, tout ce qui correspond entre eux est "capturé" dans une variable et peut être rappelé dans la pièce de remplacement, avec \1, \2, \3, etc.
  • Alors, ici, trouvez \(.*("\)\(.*,\)\(.*\)).
    • Capture du groupe 1: .*(". Capturez depuis le début jusqu'à tout ce qui se termine par ("
    • Groupe de capture 2: .*,. À partir de # 1, capturez jusqu'à ,.
    • Capture du groupe 3: .*. Capturez jusqu’à _ (sans inclure) ).
  • Remplacez ensuite par les groupes de capture et le formatage supplémentaire \1\3: \2\3).
8
Sparhawk