0
votes

Suppression de la première chaîne sur la première ligne de deux lignes consécutives avec des piqûres identiques au début

Je travaille sur des fichiers texte (copiés et collés d'un groupe Facebook) J'ai dépouillé toutes les chaînes "comme" "commentaire" numéros de commentaire, etc. avec le groupe de commandes SED. Je suis laissé avec des lignes qui ressemblent à ceci: xxx

Je cherche un regexp pour sed ou un autre utilitaire UNIX qui supprimerait le nom de la ligne (S ) sans autre texte qui suit, laissant les lignes ressemblant à ceci: xxx

ode ici.

. J'ai regardé uniq et plusieurs exemples de regrett dans gvim mais je ne pouvais pas voir un moyen d'atteindre mon objectif. Les noms peuvent être composés de 3 mots.


6 commentaires

Je ne sais pas que je comprends complètement, mais si vous imprimez uniquement le numéro de ligne impairs, vous pouvez utiliser: awk 'nr% 2 == 1 {imprimer $ 0}' $ FileName espère que cela aide.


Bonjour, j'essaie d'enlever la ligne contenant le nom duplicate, mais pas d'autre texte. S'il vous plaît voir mon édition à la question pour une version plus précise du fichier travaillant sur. Merci pour votre suggestion, j'ai essayé avec le texte ci-dessus et il est retourné Jane Doe John Doe


Modifier Votre question à afficher la sortie que vous attendez compte tenu de l'entrée que vous avez fournie, pas d'une autre sortie d'une autre entrée que vous n'avez pas. t fourni. Clarifiez également si les noms sont TOUJOURS 2 mots ou peuvent être multiples comme Arthur Conan Doyle .


Fait @ed Morton


Ensuite, comment pouvez-vous dire quel est un nom de 3 mots à partir d'un nom de 2 mots suivi de 1 mot de "texte supplémentaire"? Pourquoi n'est-ce pas donec ac urna ut quam sagittis placerat ID Vitae Justo. inclus dans la sortie? S'il était précédé d'une ligne qui était Donec AC URNA UT Quam Sagittis Placerat ID Vitae TOP Votre réponse acceptée < / a> l'imprimerait - est-ce vraiment votre comportement souhaité?


La première incidence du nom n'est jamais suivie d'autre chose. Si la deuxième incidence du nom est suivie de quelque chose, je souhaite le garder. Le problème que j'ai est la duplication du nom sur une ligne suivie de l'espace vide au-dessus de la ligne avec le nom et toutes les informations suivantes. La réponse fournie a fait exactement ce que je voulais, supprimé la ligne, y compris le nom qui ne quitte que la deuxième ligne et tout texte ultérieur. S'il vous plaît, aidez-moi à comprendre où vous pensez comment j'aurais pu mieux poser la question pour la référence future.


3 Réponses :


2
votes

Ceci pourrait fonctionner pour vous (GNU SED):

sed -E 'N;/^(.*)\n\1./!P;D' file


1 commentaires

Je n'ai jamais su que des références au dos étaient disponibles pour être utilisées dans le cadre de la regex elle-même.



0
votes

dans Vim, vous pouvez effectuer ce que vous pouvez effectuer ce qui suit: xxx

qui recherche une ligne, suivi de \ n et la même ligne (plus quelque chose après quoi que ce soit. n'est pas spécifié) et le remplace avec le motif trouvé, supprimant la première partie.


0 commentaires

0
votes

Si vos données dans d code> fichier, essayé sur GNU SED:

sed -E '/^\w+\s\w+\s*$/{N;s/([^\n]+)\n(\1.+)/\2/;b};d' d


0 commentaires