2010-04-19 5 views
3

J'ai deux fichiers texte, je veux placer un texte au milieu d'une autre, je l'ai fait quelques recherches et trouvé des informations sur l'ajout de chaînes simples:fusionner deux fichiers texte à un endroit précis, sed ou awk

I un commentaire dans le second fichier texte appelé STUFFGOESHERE, alors j'ai essayé:

sed '/^STUFFGOESHERE/a file1.txt' file2.txt 

sed: 1: "/^STUFFGOESHERE/a long.txt": commande un \ attend suivi du texte

Je essayé quelque chose de différent, en essayant de placer le contenu du texte basé sur une ligne donnée, mais pas lu ck.

Des idées?

Répondre

5

Cela devrait le faire:

sed '/STUFFGOESHERE/ r file1.txt' file2.txt 

Si vous souhaitez supprimer la ligne STUFFGOESHERE:

sed -e '/STUFFGOESHERE/ r file1.txt' -e '/STUFFGOESHERE/d' file2.txt 

Si vous souhaitez modifier fichier2 en place:

sed -i -e... 

(ou peut-être sed -i '' -e..., j'utilise GNU sed 4.1.5.)

2

Si vous pouvez utiliser ex ou ed, essayez

cat <<EOF | ex -e - file2.txt 
/^STUFFGOESHERE/ 
.r file1.txt 
w 
q 
EOF 

Le même script fonctionne ed:

cat <<EOF | ed file2.txt 
/^STUFFGOESHERE/ 
.r file1.txt 
w 
q 
EOF 
1
awk '/STUFFGOESHERE/{while((getline line<"file1")>0){ print line};next}1' file2 
1

D'un shell Unix (bash, csh, zsh, peu importe):

: | perl -e '@c = join("", map {<>} 0..eof); print $c[0] =~ /STUFFGOESHERE/ ? $` . $c[1] . $'"'"' : $c[0]' file2.txt file1.txt > newfile2.txt 
+0

Pour une raison que je ne peux pas voir pourquoi le fichier texte est soit mis après l'autre fichier, et non après STUFFGOESHERE – S1syphus

+0

Votre phrase est mal formée, mais je vais deviner ce que vous voulez dire. La raison principale est que j'écris tous mes scripts pour prendre leur entrée soit à partir de l'entrée standard ou à partir de fichiers nommés comme arguments. Je ne les écrase jamais dans le script. C'est une question d'hygiène des scripts fondamentaux. Une autre raison est que Perl n'a pas de fonction qui prend un nom de fichier et retourne le contenu du fichier, comme le fait PHP. – reinierpost

Questions connexes