voici le fichier (nommé comme exemple.xml): sur la recherche d'une chaîne avec je ne suis pas familier avec valeur = "def" code>, retirez tout le bloc de
SED code> Maintenez le motif de maintien mais quelque chose que j'ai reçu de google qui est très proche P>
<blah2 value="*" version="1.0" result="true">
<blah1 value="xyz">
<blah1 value="uvw" result="true">
<tag>4</tag>
</blah1>
</blah1>
</blah2>
3 Réponses :
Ceci pourrait fonctionner pour vous (GNU SED):
sed '/<blah2.*>/{:a;N;/<\/blah2.*>/!ba;/value="def"/d}' file
Un problème est que nous ne pouvons pas utiliser les valeurs de section de balises précédentes telles que "MA" et "BA" .. Ils peuvent ou non être présents
@satya: B code> est une commande
sed code>.
: A code> est une étiquette avec nom
A code>.
/ <\ / blah2. *> /! ba code>: si
<\ / blah2. *> code> n'a pas été trouvé dans l'espace motif, puis sautez à l'étiquette
A code>. Ceci est une boucle jusqu'à ce que
<\ / blah2. *> Code> est trouvé.
Oh! ma faute. Laissez-moi essayer ceci
Cela fonctionne bien! Une dernière chose que j'ai oublié de mentionner cela, parfois il y a un commentaire au-dessus de la section Tag. Peut-il être supprimé dans le cadre de SED? Sinon, je peux le supprimer séparément comme un autre SED.
Si la ligne de commentaire est la ligne avant le
sed 'n; /
Supprimer la deuxième étiquette sortie: p> si vous souhaitez modifier Fichier surplace, Ajouter l'option -L. P> bla2 code> avec xmlstarlet:
Mais celui-ci ne vérifie pas la balise avec la valeur "def". Le nombre de sections de balises peut être plus ou moins.
Génial! une question. Le commentaire XML peut-il être supprimé sur cette section à l'aide de XMLStarlet?
Ajouter - Supprimer '// configs / commentaires ()' code> à
xmlstarlet Modifier code> commande pour supprimer toutes les commandes de la balise
configs code>.
Merci @cyrus. Je suis juste en train de choisir la réponse SED comme solution acceptée en raison des restrictions actuelles que j'ai. Idéalement, je voudrais choisir les deux réponses comme des réponses acceptées
@satya - Voici une autre option xpath (non testée): // blah2 [.// bla1 / @ value = 'def'] code>
Depuis que vous êtes satisfait d'une solution SED, voici une alternative meilleure (plus claire, plus portable, etc.), étant donné votre exemple d'échantillon publié / sortie: si ce n'est pas tout ce que vous Besoin, il y a une meilleure alternative Awk pour tout ce que vous avez besoin, car SED n'est que le meilleur pour faire S / vieux / Nouveau sur des chaînes individuelles. P> P>
Est-il possible de supprimer des lignes de commentaires avec le bloc. Le commentaire peut être une ligne simple avant ou une ligne multi-lignes une xml ou code>
Regardez la sortie que j'ai postée - il a supprimé la ligne de commentaire (voir comment code> n'est pas présent dans la sortie?) Et peu importe Si c'est une seule ou plusieurs lignes
D'accord, j'ai essayé et ça marche s'ils sont séparés par Newline. Si je supprimais la nouvelle ligne entre Blah2 Blocks ou si je supprimai la nouvelle ligne entre le dernier bloc BLAH2 et les configurations, cela ne fonctionne pas :(
@satya Tout ce que nous devons continuer, c'est l'exemple d'entrée que vous fournissez. Si votre entrée réelle ne suivez pas le même format que votre exemple d'entrée, vous ne devriez pas vous attendre à une solution qui n'utilise pas un analyseur XML pour fonctionner de manière robuste. Si vous pouvez utiliser un analyseur XML, vous devriez. Si vous ne pouvez pas mettre à jour votre exemple, reflétez vraiment votre format de fichiers et que vous pourrez peut-être obtenir une réponse SED ou AWK pour gérer ce format spécifique.
Ne pas analyser xml / html avec regex. Je suggère d'utiliser un analyseur XML / HTML (xmlstarlet, xmllint ... ).
Est
def code> toujours un attribut de la balise
/ configs / bla2 [2] / bla2 / bla1 code>?
Droite, actuellement XMLSTARLET n'est pas disponible sur cet hôte (qui est de propriétaire Linux) et aucun accès Internet. Je vais devoir télécharger et déplacer le binaire là-bas.
Oui, def est toujours attribué en second bla1
Une réponse avec Xmlstarlet vous aiderait-elle?
J'aimerais connaître la réponse SED normale et la réponse de XMLStarlet est alors bonus. BTW, pour le rendre simple, vous pouvez assumer def peut être l'une des tags de Blah1 à l'intérieur. Pouvons-nous faire le travail d'espace et d'espace de modèle pour ce scénario?