2011-07-19 3 views
0

Une de ma configuration a une section foo spécifique:sed/awk: Supprimer les lignes de motif à motif

# Configuration foo - Start 
blah 
blah 
blah 
# Configuration foo - End 

Je voudrais appliquer les modifications au présent article de le remplacer par le contenu d'un autre fichier (par exemple new_foo.txt). La section commence toujours par # Configuration foo - Start et se termine par # Configuration foo - Start

Quelle est la meilleure façon d'y parvenir dans l'écosystème Ubuntu \ bash? Je peux écrire un petit script Python, mais je soupçonne qu'il pourrait y avoir un one-liner élégant pour celui-ci.

Répondre

4
sed -e '/^# Configuration foo - Start$/r new_foo.txt' -e '/^# Configuration foo - Start$/,/^# Configuration foo - End$/d' 
+0

Très impressionnant! –

3
{ 
    sed -n '0,/^# Configuration foo - Start$/p' infile 
    cat new_foo.txt 
    sed -n '/^# Configuration foo - End$/,$p' infile 
} > outfile 

Si vous le mettez sur une seule ligne, puis ne pas oublier de mettre un ; et un espace avant le }.

1

En supposant new_foo.txt est assez petit pour se tenir en mémoire, cela fonctionne pour moi:

awk 'NR==FNR {A[i++] = $0} NR>FNR && !exclude {print $0} /# Configuration foo - Start/ {exclude=1; for (line in A) { print line }} /# Configuration foo - End/ {exclude=0; print$0}' new_foo.txt config