sed (ou ?) pour remplacer plusieurs lignes dans fichiers par d'autres - Shell/Batch - Programmation
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?
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 |
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 :
|
Je vais essayer merci . et je reviens dire si ça a fonctionné
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 :
|
Je confirme qu'avec -z ça fonctionne bien
Merci beaucoup
Marsh Posté le 24-09-2023 à 12:17:37
ReplyMarsh Posté le 24-09-2023 à 13:30:45
rat de combat a écrit : \r == retour chariot. |
Ok, thanks
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
Marsh Posté le 24-09-2023 à 16:02:37
ReplyMarsh Posté le 25-09-2023 à 01:44:45
rat de combat a écrit : \r == retour chariot. |
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+,
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.
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
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