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?
newContent=`cat new_file`
Perl -0777 -i -pe "s/(### BEGIN GENERATED CONTENT\\n).*(\\n### END GENERATED CONTENT)/\$1$newContent\$2/s" existing_file
lead='^### BEGIN GENERATED CONTENT$'
tail='^### END GENERATED CONTENT$'
sed -e "/$lead/,/$tail/{ /$lead/{p; r insert_file
}; /$tail/p; d }" existing_file
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
ed -s FILE1 <<EOF
/### BEGIN GENERATED/+,/### END GENERATED/-d
/### BEGIN GENERATED/ r FILE2
w
q
EOF