Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
918 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  sed (ou ?) pour remplacer plusieurs lignes dans fichiers par d'autres

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

sed (ou ?) pour remplacer plusieurs lignes dans fichiers par d'autres

n°2454720
MilesTEG1
Posté le 23-09-2023 à 23:01:45  profilanswer
 

... avec des variables
 
 
Hello,
Je cherche à modifier un fichier en remplaçant un groupe de ligne (successives) par un autre groupe de ligne.
Je n'arrive pas à faire fonctionner la commande sed avec mes variables durant mes tests.
Du coup, je cherche de l'aide d'un "cador" de la commande sed.
 
 
J'ai mis 3 fichiers ici : https://transfert.free.fr/LGCVeWn
 
https://i.imgur.com/q2l9D0Yl.png
 
 
Je colle ici le code pour montrer ce que je veux faire, mais il faut prendre les fichiers, car ils ont des tabulations qu'il faut conserver.
 
Fichier  partie_a_remplacer.js :  

{
     xtype: 'box',
     colspan: 2,
     padding: '0 0 20 0',
 },
 {
     itemId: 'cpus',
     colspan: 2,
     printBar: false,
     title: gettext('CPU(s)'),
     textField: 'cpuinfo',
     renderer: Proxmox.Utils.render_cpu_model,
     value: '',
 },
 {
     itemId: 'kversion',
     colspan: 2,
     title: gettext('Kernel Version'),
     printBar: false,
     textField: 'kversion',
     value: '',
 },
 {
     itemId: 'version',
     colspan: 2,
     printBar: false,
     title: gettext('PVE Manager Version'),
     textField: 'pveversion',
     value: '',
 },


 
 
Fichier texte_de_remplacement.js :

{
     xtype: 'box',
     colspan: 2,
     padding: '0 0 10 0',
 },
 {
     itemId: 'cpus',
     colspan: 2,
     printBar: false,
     title: gettext('CPU(s)'),
     textField: 'cpuinfo',
     renderer: Proxmox.Utils.render_cpu_model,
     value: '',
 },
 {
     itemId: 'kversion',
     colspan: 2,
     title: gettext('Kernel Version'),
     printBar: false,
     textField: 'kversion',
     value: '',
 },
 {
     itemId: 'version',
     colspan: 2,
     printBar: false,
     title: gettext('PVE Manager Version'),
     textField: 'pveversion',
     value: '',
 },
 {
  itemId: 'thermal',
  colspan: 2,
  printBar: false,
  title: gettext('CPU Thermal State'),
  textField: 'thermalstate',
  renderer: function (value) {
   let objValue = JSON.parse(value);
   let core0 = objValue["coretemp-isa-0000"]["Core 0"]["temp2_input"];
   let core1 = objValue["coretemp-isa-0000"]["Core 1"]["temp3_input"];
   let core2 = objValue["coretemp-isa-0000"]["Core 2"]["temp4_input"];
   let core3 = objValue["coretemp-isa-0000"]["Core 3"]["temp5_input"];
   return `Core 0: ${core0}°C | Core 1: ${core1}°C | Core 2: ${core2}°C | Core 3: ${core3}°C`;
  }
 },


 
Fichier extrait_du_fichier_de_base.js

Ext.define('PVE.node.StatusView', {
    extend: 'Proxmox.panel.StatusView',
    alias: 'widget.pveNodeStatus',
 
    height: 300,
    bodyPadding: '15 5 15 5',
 
    layout: {
 type: 'table',
 columns: 2,
 tableAttrs: {
     style: {
  width: '100%',
     },
 },
    },
 
    defaults: {
 xtype: 'pmxInfoWidget',
 padding: '0 10 5 10',
    },
 
    items: [
 {
     itemId: 'cpu',
     iconCls: 'fa fa-fw pmx-itype-icon-processor pmx-icon',
     title: gettext('CPU usage'),
     valueField: 'cpu',
     maxField: 'cpuinfo',
     renderer: Proxmox.Utils.render_node_cpu_usage,
 },
 {
     itemId: 'wait',
     iconCls: 'fa fa-fw fa-clock-o',
     title: gettext('IO delay'),
     valueField: 'wait',
     rowspan: 2,
 },
 {
     itemId: 'load',
     iconCls: 'fa fa-fw fa-tasks',
     title: gettext('Load average'),
     printBar: false,
     textField: 'loadavg',
 },
 {
     xtype: 'box',
     colspan: 2,
     padding: '0 0 20 0',
 },
 {
     iconCls: 'fa fa-fw pmx-itype-icon-memory pmx-icon',
     itemId: 'memory',
     title: gettext('RAM usage'),
     valueField: 'memory',
     maxField: 'memory',
     renderer: Proxmox.Utils.render_node_size_usage,
 },
 {
     itemId: 'ksm',
     printBar: false,
     title: gettext('KSM sharing'),
     textField: 'ksm',
     renderer: function(record) {
  return Proxmox.Utils.render_size(record.shared);
     },
     padding: '0 10 10 10',
 },
 {
     iconCls: 'fa fa-fw fa-hdd-o',
     itemId: 'rootfs',
     title: '/ ' + gettext('HD space'),
     valueField: 'rootfs',
     maxField: 'rootfs',
     renderer: Proxmox.Utils.render_node_size_usage,
 },
 {
     iconCls: 'fa fa-fw fa-refresh',
     itemId: 'swap',
     printSize: true,
     title: gettext('SWAP usage'),
     valueField: 'swap',
     maxField: 'swap',
     renderer: Proxmox.Utils.render_node_size_usage,
 },
 {
     xtype: 'box',
     colspan: 2,
     padding: '0 0 20 0',
 },
 {
     itemId: 'cpus',
     colspan: 2,
     printBar: false,
     title: gettext('CPU(s)'),
     textField: 'cpuinfo',
     renderer: Proxmox.Utils.render_cpu_model,
     value: '',
 },
 {
     itemId: 'kversion',
     colspan: 2,
     title: gettext('Kernel Version'),
     printBar: false,
     textField: 'kversion',
     value: '',
 },
 {
     itemId: 'version',
     colspan: 2,
     printBar: false,
     title: gettext('PVE Manager Version'),
     textField: 'pveversion',
     value: '',
 },
    ],
 
    updateTitle: function() {
 var me = this;
 var uptime = Proxmox.Utils.render_uptime(me.getRecordValue('uptime'));
 me.setTitle(me.pveSelNode.data.node + ' (' + gettext('Uptime') + ': ' + uptime + ')');
    },
 
    initComponent: function() {
 let me = this;
 
 let stateProvider = Ext.state.Manager.getProvider();
 let repoLink = stateProvider.encodeHToken({
     view: "server",
     rid: `node/${me.pveSelNode.data.node}`,
     ltab: "tasks",
     nodetab: "aptrepositories",
 });
 
 me.items.push({
     xtype: 'pmxNodeInfoRepoStatus',
     itemId: 'repositoryStatus',
     product: 'Proxmox VE',
     repoLink: `#${repoLink}`,
 });
 
 me.callParent();
    },
});


 
 
J'ai essayé ceci :


a_rechercher="\t    xtype: 'box',\n\t    colspan: 2,\n\t    padding: '0 0 20 0',\n\t\},\n\t\{\n\t    itemId: 'cpus',\n\t    colspan: 2,\n\t    printBar: false,\n\t    title: gettext('CPU(s)'),\n\t    textField: 'cpuinfo',\n\t    renderer: Proxmox.Utils.render_cpu_model,\n\t    value: '',\n\t\},\n\t\{\n\t    itemId: 'kversion',\n\t    colspan: 2,\n\t    title: gettext('Kernel Version'),\n\t    printBar: false,\n\t    textField: 'kversion',\n\t    value: '',\n\t\},\n\t\{\n\t    itemId: 'version',\n\t    colspan: 2,\n\t    printBar: false,\n\t    title: gettext('PVE Manager Version'),\n\t    textField: 'pveversion',\n\t    value: '',\n\t\},"
 
a_remplacer="\t    xtype: 'box',\n\t    colspan: 2,\n\t    padding: '0 0 10 0',\n\t\},\n\t\{\n\t    itemId: 'cpus',\n\t    colspan: 2,\n\t    printBar: false,\n\t    title: gettext('CPU(s)'),\n\t    textField: 'cpuinfo',\n\t    renderer: Proxmox.Utils.render_cpu_model,\n\t    value: '',\n\t\},\n\t\{\n\t    itemId: 'kversion',\n\t    colspan: 2,\n\t    title: gettext('Kernel Version'),\n\t    printBar: false,\n\t    textField: 'kversion',\n\t    value: '',\n\t\},\n\t\{\n\t    itemId: 'version',\n\t    colspan: 2,\n\t    printBar: false,\n\t    title: gettext('PVE Manager Version'),\n\t    textField: 'pveversion',\n\t    value: '',\n\t\},\n\t\{\n\t\titemId: 'thermal',\n\t\tcolspan: 2,\n\t\tprintBar: false,\n\t\ttitle: gettext('CPU Thermal State'),\n\t\ttextField: 'thermalstate',\n\t\trenderer: function (value) \{\n\t\t\tlet objValue = JSON.parse(value);\n\t\t\tlet core0 = objValue\[\"coretemp-isa-0000\"\]\[\"Core 0\"\]\[\"temp2_input\"\];\n\t\t\tlet core1 = objValue\[\"coretemp-isa-0000\"\]\[\"Core 1\"\]\[\"temp3_input\"\];\n\t\t\tlet core2 = objValue\[\"coretemp-isa-0000\"\]\[\"Core 2\"\]\[\"temp4_input\"\];\n\t\t\tlet core3 = objValue\[\"coretemp-isa-0000\"\]\[\"Core 3\"\]\[\"temp5_input\"\];\n\t\t\treturn \`Core 0: \$\{core0\}°C \| Core 1: \$\{core1\}°C \| Core 2: \$\{core2\}°C \| Core 3: \$\{core3\}°C\`;\n\t\t\}\n\t\},"
 
 sed "s/$a_rechercher/$a_remplacer/g" ./extrait_du_fichier_de_base.js > tmp.js
 


Mais ça ne fait rien.
En gros dès que ça doit gérer un saut de ligne, ça ne fonctionne plus.
 
Si quelqu'un sait comment faire la modification via une commande sed, je suis preneur.
 
PS : c'est sous debian 12 + proxmox.
 
 
 
Merci pour votre aide


---------------
Mes ventes : [FeedBack] http://forum.hardware.fr/hfr/Achat [...] 4599_1.htm
mood
Publicité
Posté le 23-09-2023 à 23:01:45  profilanswer
 

n°2454721
rat de com​bat
attention rongeur méchant!
Posté le 23-09-2023 à 23:34:44  profilanswer
 

Connais pas sed, mais avec Perl p.ex. faut lui dire que tu veux du multi-lignes, de mémoire c'est un truc genre s///gm. Sinon tu es certain d'avoir du \n et pas du \r\n?

n°2454723
kajoux
Posté le 24-09-2023 à 09:27:27  profilanswer
 

Je n'ai pas regardé le détail et je ne peux pas tester actuellement, mais essaie -z pour les sauts de ligne :

sed -z "s/$a_rechercher/$a_remplacer/g" ./extrait_du_fichier_de_base.js > tmp.js

n°2454724
MilesTEG1
Posté le 24-09-2023 à 09:37:39  profilanswer
 

rat de combat a écrit :

Connais pas sed, mais avec Perl p.ex. faut lui dire que tu veux du multi-lignes, de mémoire c'est un truc genre s///gm. Sinon tu es certain d'avoir du \n et pas du \r\n?


Je n’ai pas de contre indication à utiliser autre chose que sed , même si je préfère utiliser sed qui est présent d’office sur debian.
 
Pour les \r\n je ne sais pas du tout…
Quand je copie les lignes dans BBEdit et les colle dans le champ de recherche ça me sort le contenu que j’ai collé dans les variables.
 
Ça correspond à quoi le caractère \r ?
 
\n c’est le saut de ligne et \t la tabulation.
 
 

kajoux a écrit :

Je n'ai pas regardé le détail et je ne peux pas tester actuellement, mais essaie -z pour les sauts de ligne :

sed -z "s/$a_rechercher/$a_remplacer/g" ./extrait_du_fichier_de_base.js > tmp.js



Je vais essayer merci .  :jap: et je reviens dire si ça a fonctionné  :)  


---------------
Mes ventes : [FeedBack] http://forum.hardware.fr/hfr/Achat [...] 4599_1.htm
n°2454725
MilesTEG1
Posté le 24-09-2023 à 11:09:34  profilanswer
 

kajoux a écrit :

Je n'ai pas regardé le détail et je ne peux pas tester actuellement, mais essaie -z pour les sauts de ligne :

sed -z "s/$a_rechercher/$a_remplacer/g" ./extrait_du_fichier_de_base.js > tmp.js



Je confirme qu'avec -z ça fonctionne bien :)
 
Merci beaucoup  :jap:


---------------
Mes ventes : [FeedBack] http://forum.hardware.fr/hfr/Achat [...] 4599_1.htm
n°2454726
rat de com​bat
attention rongeur méchant!
Posté le 24-09-2023 à 12:17:37  profilanswer
 

\r == retour chariot.
 
\r\n c'est le standard sous Redmond OS. :o

n°2454727
MilesTEG1
Posté le 24-09-2023 à 13:30:45  profilanswer
 

rat de combat a écrit :

\r == retour chariot.
 
\r\n c'est le standard sous Redmond OS. :o


Ok, thanks  :jap:  
 
C'est le CRLF vs LF c'est ça ?
 
Mais je suis sous macOS, et les fichiers sont sur une debian ^^
donc normalement que \n


---------------
Mes ventes : [FeedBack] http://forum.hardware.fr/hfr/Achat [...] 4599_1.htm
n°2454733
rat de com​bat
attention rongeur méchant!
Posté le 24-09-2023 à 16:02:37  profilanswer
 

MilesTEG1 a écrit :

C'est le CRLF vs LF c'est ça ?

Exactement.


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
n°2454735
gilou
Modérateur
Modzilla
Posté le 25-09-2023 à 01:44:45  profilanswer
 

rat de combat a écrit :

\r == retour chariot.
 
\r\n c'est le standard sous Redmond OS. :o

C'est surtout défini dans les specs du langage C, des combinaisons entre \ et un caractère :
\a pour alert (en fait c'est bell, mais \b est déjà pris)
\b pour backspace
\f pour formfeed
\n pour newline
\r pour return
\t pour tab (horizontal tab, car...)
\v pour vertical tab
\0 pour null  
(et pas mal de compilos ont ajouté \e pour escape)
Tour ces caractères sauf \0 étant interprétés par les devices (imprimantes, écrans...)
 
A+,


Message édité par gilou le 25-09-2023 à 01:45:43

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2454767
rat de com​bat
attention rongeur méchant!
Posté le 25-09-2023 à 15:06:49  profilanswer
 

Oui bien sûr, je voulais insister sur la différence Manchot<->Redmond qui peut poser des soucis parfois.
 
Après comme tu dis, les \X c'est dans le standard C et si on veut des explications pourquoi il existe tel ou tel truc faut remonter jusqu'au ASCII.


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  sed (ou ?) pour remplacer plusieurs lignes dans fichiers par d'autres

 

Sujets relatifs
(Résolu) VBA Word et suppression de marques de paragraphe (lignes)Regrouper plusieurs résultats sur une seule ligne
Retirer les 7 derniers caractères de nom de fichiersSelect dans plusieurs BDD avec UNION - Problème de doublons
Je cherche un logiciel gratuit pour remplacer frontpageRemplacer chaque caractère par autre en gardant la structure [Résolu]
Ffprobe - créer fichiers txt d'analyse dans sous-dossiersRajouter date après premier espace dans noms de fichiers
Ecrire listview 
Plus de sujets relatifs à : sed (ou ?) pour remplacer plusieurs lignes dans fichiers par d'autres


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR