web-dev-qa-db-fra.com

Comment remplacer une partie d'un fichier texte entre des marqueurs par un autre fichier texte?

Dites que j'ai un fichier texte comme ceci:

# custom content section
a
b

### BEGIN GENERATED CONTENT
c
d
### END GENERATED CONTENT

J'aimerais remplacer la partie entre les balises GENERATED CONTENT par le contenu d'un autre fichier.

Quel est le moyen le plus simple de faire cela?

25
smokris
newContent=`cat new_file`
Perl -0777 -i -pe "s/(### BEGIN GENERATED CONTENT\\n).*(\\n### END GENERATED CONTENT)/\$1$newContent\$2/s" existing_file
4
smokris
lead='^### BEGIN GENERATED CONTENT$'
tail='^### END GENERATED CONTENT$'
sed -e "/$lead/,/$tail/{ /$lead/{p; r insert_file
        }; /$tail/p; d }"  existing_file
34
Peter.O

Attention: Ce n'est certainement pas la façon la plus simple de le faire. (EDIT: bash fonctionne; POSIX grep est bien aussi)

Si le texte principal se trouve dans le fichier "main" et que le contenu généré se trouve dans le fichier "gen", procédez comme suit:

#!/bin/bash
BEGIN_GEN=$(cat main | grep -n '### BEGIN GENERATED CONTENT' | sed 's/\(.*\):.*/\1/g')
END_GEN=$(cat main | grep -n '### END GENERATED CONTENT' | sed 's/\(.*\):.*/\1/g')
cat <(head -n $(expr $BEGIN_GEN - 1) main) gen <(tail -n +$(expr $END_GEN + 1) main) >temp
mv temp main
4
Dr Kitty
ed -s FILE1 <<EOF
/### BEGIN GENERATED/+,/### END GENERATED/-d
/### BEGIN GENERATED/ r FILE2
w
q
EOF
1
Jetchisel