web-dev-qa-db-fra.com

Que fait l'option sed -i?

Je débogue un script Shell et j'essaie de découvrir la tâche effectuée par la commande suivante:

sed -i '1,+999d' /home/org_user/data.txt

J'ai besoin de changer cette commande car elle échoue avec l'erreur suivante:

illegal option sed -i

Mais avant de changer, j'ai besoin de comprendre le fonctionnement du BAU.

Appréciez toutes les contributions à cet égard.

25
Allzhere

Une utilisation applicable de ceci est la suivante. Supposons que vous ayez le fichier suivant file.txt:

1, 2, 6, 7, "p" 

Nous voulons remplacer "p" par 0.

sed 's/"p"/0/g' file.txt

L'utilisation de ce qui précède imprime simplement la sortie en ligne de commande.

Vous penseriez pourquoi ne pas simplement rediriger ce texte dans le fichier comme ceci:

sed 's/"p"/0/g' file.txt > file.txt

Malheureusement à cause de la nature des redirections ce qui précède produira simplement un fichier vierge.

Au lieu de cela, un fichier temporaire doit être créé pour la sortie qui écrase plus tard le fichier d'origine quelque chose comme ceci:

sed 's/"p"/0/g' file.txt > tmp.txt && mv tmp.txt file.txt

Au lieu de faire la longue solution de contournement ci-dessus, l'option d'édition en place de sed avec -i permet une commande beaucoup plus simple:

sed -i 's/"p"/0/g' file.txt
48
Philip Kirkbride

Si -i option donnée, sed édition des fichiers en place.

   -i[SUFFIX], --in-place[=SUFFIX]

          edit files in place (makes backup if extension supplied)

de sed (1)

http://www.gnu.org/software/sed/manual/sed.html#Introduction

7
falsetru

Certaines implémentations de sed ne prennent pas en charge le -i option. Ce qu'il fait peut être simulé par

sed -e '...' file > tmp
mv tmp file
4
choroba