Comment supprimer les lignes de la chaîne correspondante jusqu’à la prochaine correspondance avec la commande sed

J’ai un contenu suivant dans un fichier content.txt

cat content.txt [testing] This is testing I want to remove content [testing1] This is testing1 This is contains testing information [dummy] some text here as well this is a dummy file [source] This is the source file it contains data related to source file 

J’ai un autre fichier “test.txt” qui contient une chaîne à supprimer du fichier “content.txt”

 cat file.txt testing1 dummy 

J’ai besoin que chaque chaîne soit lue à partir de fichier.txt et la même chaîne devrait être supprimée suivie des lignes suivantes jusqu’à ce que la chaîne suivante soit trouvée entre crochets dans le contexte.txt

La sortie devrait être comme ci-dessous:

 [testing] This is testing I want to remove content [source] This is the source file it contains data related to source file 

Commande courte awk :

 awk -vk="testing1" '/^\[/{ f = ($1 == "["k"]") }!f' file 
  • k="testing1" – nom de la clé indiquant la section à ignorer
  • f = ($1 == "["k"]") – définir le drapeau f avec la valeur true lors de la rencontre de la section désignée par la clé k ; sinon – sertie de false

Le résultat:

 [testing] This is testing I want to remove content [dummy] some text here as well this is a dummy file 

Ce type de tâche est exactement ce que le mode paragraphe de awk a été créé pour gérer:

 $ awk -v RS= -v ORS='\n\n' '$1 != "[testing1]"' file [testing] This is testing I want to remove content [dummy] some text here as well this is a dummy file