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

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Remplacer plusieurs lignes par un seul ";" dans un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Remplacer plusieurs lignes par un seul ";" dans un fichier

n°1339314
parpagnas
Posté le 11-06-2013 à 20:26:54  profilanswer
 

Bonsoir,
 
J'ai un fichier qui ressemble à ca:  
 

Code :
  1. DROP INDEX SwCatDeviceLicenses_Suite ON ampdbuser.SwCatDeviceLicenses;
  2. DROP INDEX AppListSwCatAss_AppList ON ampdbuser.AppListSwCatAssignments;
  3. DROP INDEX LicensedSwCatAss_LAppID ON ampdbuser.LicensedSwCatAssignments;
  4. DROP INDEX SQLS_IDX_ADMGRPXR_1 ON ampdbuser.AdminGroupAssignedRights
  5. (
  6.     ObjectTypeID ASC,
  7.     AdminGroupID ASC,
  8.     ObjectID ASC,
  9.     ReadAccess ASC
  10. ) ON ampdbuser."AMP_INDEX";


Je dois bien évidemment supprimer

Code :
  1. (
  2.     ObjectTypeID ASC,
  3.     AdminGroupID ASC,
  4.     ObjectID ASC,
  5.     ReadAccess ASC
  6. ) ON ampdbuser."AMP_INDEX";


et le remplacer par

Code :
  1. ;

si possible à la ligne d'avant, sinon ca n'est pas important.
 
J'ai cherché comment faire avec sed, awk mais je ne trouve que des commandes qui vont supprimer "x" lignes après ou qui vont chercher la même lignes sur plusieurs lignes etc...
 
Je suis quand même tombé sur cette page qui est assez complète mais ne répond pas a mon besoin, et bien d'autres....
 
Quelqu'un aurait-il une idée?

mood
Publicité
Posté le 11-06-2013 à 20:26:54  profilanswer
 

n°1339332
Nukolau
Posté le 12-06-2013 à 10:40:39  profilanswer
 

Une solution simple, c'est si tu es sur que les lignes de drop sont toujours sur une seule ligne.
Si c'est le cas, tu peux filtrer directement le fichier sur les lignes commençant par drop, puis une fois fait, toutes les lignes ne terminant pas par un ; tu en ajoutes un.
 
En gros :

Code :
  1. grep "^[ ^I]*DROP" fichier | sed 's/[^;][ ^I]*$/;/'


 
( ^I = tabulation )
 
Mais bon, comme dit, il faut que tu soit sur de ton fichier en entrée, si un drop est sur deux lignes c'est foutu.
 
Si tu n'es pas sur du fichier, à part le parser ligne à ligne, je ne vois pas de solutions

n°1339555
roondar
Posté le 15-06-2013 à 14:29:36  profilanswer
 

# http://stackoverflow.com/questions [...] ern-in-sed
# sed -e '/begin/,/end/{s/begin/replacement/p;d}'
 

Code :
  1. cat temp.txt
  2. DROP INDEX SwCatDeviceLicenses_Suite ON ampdbuser.SwCatDeviceLicenses;
  3. DROP INDEX AppListSwCatAss_AppList ON ampdbuser.AppListSwCatAssignments;
  4. DROP INDEX LicensedSwCatAss_LAppID ON ampdbuser.LicensedSwCatAssignments;
  5. DROP INDEX SQLS_IDX_ADMGRPXR_1 ON ampdbuser.AdminGroupAssignedRights
  6. (
  7.     ObjectTypeID ASC,
  8.     AdminGroupID ASC,
  9.     ObjectID ASC,
  10.     ReadAccess ASC
  11. ) ON ampdbuser."AMP_INDEX";


 

Code :
  1. sed  -i '/(/,/)/{s/(/;/p;d}' temp.txt


Code :
  1. cat temp.txt
  2. DROP INDEX SwCatDeviceLicenses_Suite ON ampdbuser.SwCatDeviceLicenses;
  3. DROP INDEX AppListSwCatAss_AppList ON ampdbuser.AppListSwCatAssignments;
  4. DROP INDEX LicensedSwCatAss_LAppID ON ampdbuser.LicensedSwCatAssignments;
  5. DROP INDEX SQLS_IDX_ADMGRPXR_1 ON ampdbuser.AdminGroupAssignedRights
  6. ;


Message édité par roondar le 15-06-2013 à 14:33:18
n°1343301
zipe31
Posté le 18-08-2013 à 17:56:31  profilanswer
 

Salut,
 
"sed" a la possibilité d'ajouter (a), d'insérer (i) ou de changer (c) du texte juste avec une de ces 3 lettres.
Par contre seule la commande "c" (change) admet une plage d'adresses.
 

Code :
  1. cat brol


DROP INDEX SwCatDeviceLicenses_Suite ON ampdbuser.SwCatDeviceLicenses;
DROP INDEX AppListSwCatAss_AppList ON ampdbuser.AppListSwCatAssignments;
DROP INDEX LicensedSwCatAss_LAppID ON ampdbuser.LicensedSwCatAssignments;
DROP INDEX SQLS_IDX_ADMGRPXR_1 ON ampdbuser.AdminGroupAssignedRights
(
ObjectTypeID ASC,
AdminGroupID ASC,
ObjectID ASC,
ReadAccess ASC
) ON ampdbuser."AMP_INDEX";


Code :
  1. $ sed '/(/,/)/c;' brol


DROP INDEX SwCatDeviceLicenses_Suite ON ampdbuser.SwCatDeviceLicenses;
DROP INDEX AppListSwCatAss_AppList ON ampdbuser.AppListSwCatAssignments;
DROP INDEX LicensedSwCatAss_LAppID ON ampdbuser.LicensedSwCatAssignments;
DROP INDEX SQLS_IDX_ADMGRPXR_1 ON ampdbuser.AdminGroupAssignedRights
;


 ;)


---------------
$ man woman

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Remplacer plusieurs lignes par un seul ";" dans un fichier

 

Sujets relatifs
Remplacer ArchLinux☑[bash] Boucle for sur un fichier unique OU contenu d'un dossier ?
ecraser le contenu d'un fichier par un autre contenu[sed] supprimer \n sur un nombre indéterminé de lignes consécutives
concaténation de lignes de fichiers[VI] Quitter et passer au fichier suivant ?
Gestion de plusieurs consolesnet-snmp extend, lecture de fichier
[Android 4.1.1] Souci d'accès à un seul dossier sous ES File Explorer 
Plus de sujets relatifs à : Remplacer plusieurs lignes par un seul ";" dans un fichier


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