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.
Si vous ajoutez simplement du texte à la fin du fichier, vous n'utiliserez pas sed en premier lieu.
echo "some text" >> somefile.txt
Utilisation $ a
.
sed -i "$ a some text" somefile.txt
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:
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 ...
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.