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

sed (ou ?) pour remplacer plusieurs lignes dans fichiers par d'autres - Shell/Batch - Programmation

Marsh Posté le 23-09-2023 à 23:01:45    

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

Marsh Posté le 23-09-2023 à 23:01:45   

Reply

Marsh Posté le 23-09-2023 à 23:34:44    

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?

Reply

Marsh Posté le 24-09-2023 à 09:27:27    

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

Reply

Marsh Posté le 24-09-2023 à 09:37:39    

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
Reply

Marsh Posté le 24-09-2023 à 11:09:34    

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
Reply

Marsh Posté le 24-09-2023 à 12:17:37    

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

Reply

Marsh Posté le 24-09-2023 à 13:30:45    

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
Reply

Marsh Posté le 24-09-2023 à 16:02:37    

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!
Reply

Marsh Posté le 25-09-2023 à 01:44:45    

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é!  --
Reply

Marsh Posté le 25-09-2023 à 15:06:49    

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!
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed