J'ai deux fichiers différents:
File1
/home/user1/
/home/user2/bin
/home/user1/a/b/c
File2
<TEXT1>
<TEXT2>
Je veux remplacer le <TEXT1>
de File2 par le contenu de File1 en utilisant sed
. J'ai essayé cette commande, mais je n'ai pas obtenu de sortie appropriée:
cat File2|sed "s/<TEXT1>/$(cat File1|sed 's/\//\\\//g'|sed 's/$/\\n/g'|tr -d "\n")/g"
Vous pouvez également utiliser d'autres outils pour résoudre ce problème.
sed
implémentation utilisez-vous. Votre code fonctionne pour moi avec GNUsed
./home/user1/ n/home/user2/bin n/home/user1/a/b/cn <TEXT2>
. Pas de nouvelles lignes.diff
et lespatch
outils permettent de remplacer assez facilement certaines lignes d'un fichier par d'autres lignes.$()
dans un script sed me fait saigner les yeux. N'utilisez jamais de données externes dans des endroits où certains caractères sont interprétés avec une signification particulière.Réponses:
Voici une solution de script sed (plus facile à regarder que d'essayer de la mettre en une seule ligne sur la ligne de commande):
Exécuter:
la source
sed '/<TEXT1>/{rFile1^Md^M}' File2
où "^ M" vous appuyez sur Entrée. Le problème est que sed a vraiment besoin des sauts de ligne dans le {...} pour délimiter les commandes r et d.sed $'/<TEXT1>/ {r File1\n d}'
sed -e '/<TEXT1>/{r File1' -e 'd}' File2
<TEXT1>
, je veux juste remplacer la chaîne elle-même, en laissant le reste de la ligne intact?Text1: <TEXT1>
àText1: <file_contents>
.Cela m'a pris beaucoup de temps pour trouver cette solution en utilisant le remplacement var. Toutes les solutions sed ne fonctionnaient pas pour moi, car elles supprimaient des lignes complètes ou remplaçaient incorrectement.
Remplace toutes les occurrences de TEXT1 dans le fichier2 par le contenu du fichier1. Tout autre texte reste intact.
la source
sed
trop, car ces "extensions" (alias remplacements) sont intégrées dans la coque (bash
au moins)Je réponds car la méthode
diff
/patch
peut être intéressante dans certains cas. Pour définir une substitution des lignes contenues dans le fichierblob1
par des lignes contenues dans l'blob2
utilisation:Par exemple, si
blob1
contient:et
blob2
contient:le généré
patch-file
sera:Maintenant, vous pouvez appliquer ce patch à n'importe quel autre fichier:
Il remplacera
hello
,you
lignes parbe
,welcome
,here
lignessomefile
.la source