Sed peut-il enregistrer sa sortie dans un fichier?

34

> peut le faire.

echo "text" > file

tee peut le faire.

echo "test" | tee file 

Pouvez sed-vous le faire sans utiliser l'une des méthodes ci-dessus? Est-il possible d'enregistrer la sortie d'une sedcommande dans un fichier sans utiliser ni >ou tee?

Folatt
la source
Veuillez essayer de trouver la réponse vous-même avant de poster des questions ici. La première chose que nous demandons à nos utilisateurs est de rechercher et de rechercher avant de publier. Tout ce que vous aviez à faire était sed '' file > newfileet vous auriez vu que cela >peut en effet être utilisé avec sedcomme avec n'importe quel autre programme.
terdon
1
Cela utilise toujours l' >opérateur. J'étais intéressé s'il y avait une commande sed qui pourrait être utilisée à la place. Mais je supprimerai cette question si elle est si mauvaise.
Folatt
Ah, d'accord. OK, c'est une question très différente. Puisque vous avez accepté la sed -iréponse, je vais modifier votre question et clarifier ce que vous recherchez.
terdon
J'ai accepté " sed n'est pas destiné à la redirection des données comme teeet >(sont) censés être".
Folatt

Réponses:

50

tee et> peuvent être utilisés pour la redirection de données car ils sont destinés à être utilisés pour la redirection de données sous linux.

sed, d'autre part, est un éditeur de flux. sed n'est pas destiné à la redirection de données comme tee et> censé l'être. Cependant, vous pouvez utiliser la conjonction de commandes pour ce faire.

utiliser tee ou> avec sed

sed 's/Hello/Hi/g' file-name | tee file

ou

sed 's/Hello/Hi/g' file-name > file

utiliser sed avec l'option -i

sed -i 's/Hello/Hi/g' file-name

le dernier ne redirige pas, à la place, il apportera des modifications dans le fichier lui-même.

ankidaemon
la source
2
Merci. Vous avez compris ma question. Donc la réponse est non. Je pensais que sedcela pourrait le faire, car il est également capable de créer des fichiers de sauvegarde avec l' -i.bakoption.
Folatt
2
Correct. De plus, -i.bak n'est pas une option fixe, vous pouvez utiliser n'importe quelle extension que vous souhaitez que votre fichier de sauvegarde ait. par ex. -i.log fonctionnera également. :)
ankidaemon
Je voudrais juste ajouter que ce que je cherchais en fait echo "test" | dd of=file status=none, supprimer la sortie d'un écho sans utiliser la redirection de sortie obscure 2> /dev/null, mais a plutôt demandé les limitations de sed. J'ai été vraiment impressionné par les capacités de sed car il est capable d'ajouter des lignes dans le fichier, ce qui m'a donné l'impression que sed pouvait faire tout ce que le tee pouvait faire et plus encore.
Folatt
11

seda la wcommande qui pourrait faire ce dont vous avez besoin:

w nom de fichier

Écrivez l'espace de motif actuel dans le nom de fichier.

sed 'w file'aura à lui seul le même effet que tee file. S'il existe d'autres commandes sed, mettez la wdernière:

sed 's/This/That/;w file'

Cependant, cela ne sera pas affecté par l' -n/--quiet/--silentoption. Cela supprime uniquement le contenu qui aurait autrement été envoyé à la sortie standard.

JigglyNaga
la source
0

Comme ankidaemon a correctement indiqué comment nous pouvons enregistrer la sortie sed dans un fichier. Je voudrais ajouter que si nous effectuons certaines opérations sur un fichier, c'est-à-dire remplacer et que nous souhaitons enregistrer la sortie dans le même fichier. Il y a un -idrapeau sedqui permet des modifications sur place. Cela crée cependant un fichier de sauvegarde dans le processus. Si ce n'est pas nécessaire, cela peut être fait en passant simplement un nom de fichier vide à -iflag.

Waqar Ahmed
la source