Il y a plusieurs façons de procéder à ce sujet avec sed. Une façon est une lecture différée, comme recommandé dans la réponse acceptée. Il pourrait également s'écrire comme:
sed -e '$!N;P;/\nPointer/r file1' -e D file2
... avec un peu d'anticipation explicite au lieu de l'anticipation implémentée ailleurs avec le tampon de retenue. Cela inévitablement le même problème avec la dernière ligne que les notes @don_crissti, cependant, parce que N ne incrément le cycle de la ligne et la rcommande DEE est appliquée par numéro de ligne.
Vous pouvez le contourner:
echo | sed -e '$d;N;P;/\nPointer/r file1' -e D file2 -
Tous sedn'interpréteront pas le -pour signifier entrée standard, mais beaucoup le font. ( POSIX indique sed que le support devrait -signifier entrée standard si l'implémenteur veut -signifier entrée standard ???) 
Une autre façon consiste à gérer le contenu ajouté dans l'ordre. Il existe une autre commande qui planifie la sortie de la même manière que read, et sedl'appliquera et rlira dans l'ordre de leur script. C'est un peu plus compliqué cependant - cela implique d'utiliser l'un sedpour amettre le Pointermatch en correspondance avec la sortie d'un autre seddans son script.
sed '   /Pointer/!d                  #only operate on first match
        s/[]^$&\./*[]/\\&/g;H        #escape all metachars, Hold
        s|.*|/&/!p;//!d|p;g          #print commands, exchange
        s|.|r file1&a\\&|;q' file2|  #more commands, quit
        sed -nf - file2              #same input file
Donc, fondamentalement, le premier sedécrit le second sedun script, que le second sedlit sur l'entrée standard (peut - être ...) et s'applique à son tour. Le premier sedne fonctionne que sur la première correspondance pour les éléments Pointertrouvés, puis les qentrées. Son travail consiste à ...
s/[]^$&\./*[]/\\&/g;H
- Assurez-vous que tous les caractères du modèle sont échappés par une barre oblique inversée, car le second 
seddevra interpréter chaque bit qu'il lit littéralement pour le faire correctement. Une fois cela fait, mettez une copie dans l' Hancien espace. 
 
s|.*|/&/!p;//!d|p; x
- Dites à la seconde 
sedd' pimprimer chaque ligne d'entrée, !mais /&/celle que nous venons de sauvegarder en mode; puis à dtout de même disparaître. préimprimez les commandes à la seconde sed, puis xmodifiez les hanciens tampons et les tampons de modèle pour travailler sur notre copie enregistrée. 
 
s|.|r file1&a\\&|p;q
- Le seul caractère avec 
\nlequel nous travaillons ici est une ligne électronique, car sedelle en aura ajouté une Havant la dernière ligne. Nous insérons donc la commande r file1et la suivons avec notre \newline puis la commande a\\pour append suivie également d'une \newline. Tout le reste de notre Hligne de champ suit cette dernière ligne \nélectronique. 
 
Le script que le premier écrit ressemble à ceci:
/Pointer-file2   "23"/!p;//!d
r file1
a\
Pointer-file2   "23"
Fondamentalement, la seconde sedimprimera chaque ligne, mais celle que la première sedconfigure pour append. Pour cette ligne particulière, deux écritures différées vers la sortie standard sont planifiées - la première est la rtête de lecture file1et la seconde est une copie de la ligne que nous voulons après. Le premier sedraclage n'est même pas nécessaire dans ce cas (voir? Pas de barre oblique inverse) mais il est important de s'échapper en toute sécurité comme je le fais ici chaque fois qu'une correspondance de modèle est réaffectée en entrée.
Quoi qu'il en soit, alors ... il y a plusieurs façons.