web-dev-qa-db-fra.com

Ajouter du texte au fichier à l'aide de sed

Comment puis-je écrire du texte dans un fichier à l'aide de sed? Plus précisément, j'ajouterais des variables nulles à mon fichier texte vierge créé à l'aide de la fonction tactile. La syntaxe de sed est très déroutante pour moi.

13
Geofferey

Si vous ajoutez simplement du texte à la fin du fichier, vous n'utiliserez pas sed en premier lieu.

echo "some text" >> somefile.txt
19

Utilisation $ a.

sed -i "$ a some text" somefile.txt
17
user4896506

Ajout d'un message tardif car bien que la réponse acceptée soit la solution la plus simple à ce problème, la question met en évidence quelques situations courantes:

  1. Besoin de modifier un fichier via Sudo
  2. Essayer d'utiliser sed pour modifier un fichier vide.

En bref, vous ne pouvez pas touch, puis éditez un fichier avec sed. Sed ne fonctionne pas sur les fichiers vides, mais parfois vous devez faire l'équivalent de

Sudo echo "some text" >> somefile.txt

Sudo n'aime pas la redirection, mais il existe des solutions:

echo "some text" | Sudo tee somefile.txt

ou si les pipes ne sont pas une option non plus, ou simplement must utilisez sed, ou vous aimez simplement la complexité:

dd if=/dev/zero count=1 bs=1 of=somefile.txt
sed -i '$ a some text' somefile.txt
sed -i '1 d' somefile

Sur certains systèmes ,. vous devrez peut-être utiliser sed -i -e '$ a ...

4
DaveParillo

Cela ressemble à un problème XY pour moi. Vous pourriez obtenir des réponses meilleures ou plus utiles si vous demandez quel problème vous essayez de résoudre, plutôt que de demander de l'aide pour mettre en œuvre une solution particulière.

Mais si vous devez absolument le faire dans sed, vous pouvez utiliser la commande r de sed pour lire un fichier. Par exemple:

[ghoti@pc ~/tmp]$ cat one
RED
BLUE
[ghoti@pc ~/tmp]$ cat two
green
yellow
[ghoti@pc ~/tmp]$ echo ">> start"; sed '$r two' one; echo ">> end"
>> start
RED
BLUE
green
yellow
>> end
[ghoti@pc ~/tmp]$ 

La commande sed $r two entraîne sed à Slurp dans le fichier nommé "two" après avoir traité la dernière ligne d'entrée (qui dans ce cas provient du fichier "one").

Notez que cela fusionne un fichier dans le flux d'un autre fichier, mais la "sortie standard" de sed (stdout) est ce qui contient le flux complet/combiné. Vous pouvez rediriger cette sortie vers un fichier selon la réponse d'Ignacio si c'est ce que vous voulez.

1
ghoti