2016-07-19 1 views
1

Cette question a été posée plusieurs fois mais les réponses données sont spécifiques à GNU.Comment utiliser BSD/OS X sed pour supprimer/supprimer X lignes après match

sed -i '' "/${FIND}/,+2d" "$FILE"

donne une erreur "d'adresse de contexte attendu".

S'il vous plaît quelqu'un pourrait-il me donner un exemple de la façon d'utiliser BSD sed pour supprimer X lignes, y compris la correspondance et une autre X lignes excluant la correspondance?

Répondre

1

Ce qui suit sed script édition (à exécuter avec -n) va imiter ce que GNU sed/^pattern/,+2d fait:

/^pattern/{ 
    n 
    n 
    d 
} 

p 

Lors d'une correspondance /^pattern/, il lit les deux lignes suivantes d'entrée, puis jeter tout (redémarrer le cycle). Lorsque le motif ne correspond pas, la ligne est imprimée.

2

Le problème est que ce n'est tout simplement pas un travail pour sed, c'est un travail pour awk.

$ seq 5 | awk '/3/{c=2} !(c&&c--)' 
1 
2 
5 

Il suffit de définir les variables à c cependant de nombreuses lignes que vous voulez sauter.

Voir aussi https://stackoverflow.com/a/18409469/1745001.