2010-03-10 4 views
1

Je souhaite supprimer de plusieurs fichiers chaque instance d'un paragraphe. J'appelle le paragraphe une séquence de lignes.bash: filtrer les lignes consécutives du fichier texte

Par exemple:

 
my first line 
my second line 
my third line 
the fourth 
5th and last 

le problème est que je ne veux que de les supprimer quand ils apparaissent en tant que groupe. Par exemple, si

my first line
apparaît seul, je ne souhaite pas le supprimer.

Répondre

1

Si vous êtes en mesure d'utiliser Perl, vous pouvez le faire en une ligne comme celle-ci:

perl -0777 -pe 's/my first line\nmy second line\nmy third line\nthe fourth\n5th and last\n//g' paragraph_file 

l'explication est perlrun:

La valeur spéciale 00 provoquera Perl à slurp fichiers en mode paragraphe. La valeur 0777 provoquera Perl à slurp fichiers entiers parce qu'il n'y a aucun octet juridique avec cette valeur.

entrée de l'échantillon:

my first line 
my second line 
my third line 
the fourth 
5th and last 
hey 
my first line 
my second line 
my third line 
the fourth 
5th and last 

hello 
my first line 

Sortie:

$ perl -0777 -pe 's/my first line\nmy second line\nmy third line 
\nthe fourth\n5th and last\n//g' paragraph_file 
hey 

hello 
my first line 
+0

essayé et cela fonctionne. Je vous remercie. – flybywire

0

Vous pouvez le faire avec sed:

sed '$!N; /^\(.*\)\n\1$/!P; D' file_to_filter 
+0

comment est-ce utilisé? Où puis-je spécifier le filtre? – flybywire

+0

Si votre fichier est nommé "file_to_filter", alors cette commande dans la réponse affichera votre fichier avec les lignes dupliquées supprimées. –

3

@OP, je vous vois accepté la réponse qui permet à votre les phrases de paragraphe sont "hardcorded", donc je suppose que ces paragraphes sont toujours est-ce la même chose? c'est vrai, vous pouvez utiliser grep. Conservez le paragraphe que vous voulez vous débarrasser de dans un « filtre » fichier par exemple, utilisez l'option -f et -v de grep pour faire le travail,

grep -v -f filter file 
Questions connexes