Réponses:
Je pense que vous recherchez -i
:
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
Par exemple:
$ cat foo.txt
hello world
$ sed -i 's/o/X/g' foo.txt
$ cat foo.txt
hellX wXrld
Si vous fournissez un suffixe, cela créera un fichier de sauvegarde:
$ ls
foo.txt
$ sed -i.bak 's/o/X/g' foo.txt
$ ls
foo.txt foo.txt.bak
Le fichier d'entrée est modifié et une sauvegarde contenant les données du fichier d'origine est créée.
Notez également que ceci est pour GNU sed
, il existe de légères différences de format entre les différentes sed
implémentations.
sed
ne fait pas de montage sur place. Il crée un nouveau fichier et écrase l'ancien, l'inode change.
{ rm file; cmd > file; } < file
conduiraient à la conclusion que cmd lit et écrit dans le même fichier, ce qui n’est pas le cas. Il s’agit de deux fichiers qui portent le même nom. Mais je ne veux pas commencer une discussion ici.
sed: 1: "foo.txt": invalid command code f
lors de l'exécution sed -i 's/o/X/g' foo.txt
. Cependant, fournir une extension, comme sed -i .bak 's/o/X/g' foo.txt
fonctionne bien. Des idées comment le faire fonctionner sans créer de fichiers de sauvegarde?
sed -i '' 's/o/X/g' foo.txt
Ces solutions fonctionnent pour HPUX (UNIX):
1
{ rm test1.sh && awk '{gsub("Error", "NO_Error", $0); print}' > test1.sh; } < test1.sh
.:
2
perl -pi -e 's/Error/NO_Error/g' test1.sh
3
sed 's/Error/NO_Error/g' test1.sh | tee test1.sh
-e
l'option est pour l'exécution de plusieurs sed
commandes
sed -e 's/linux/unix/' -e 's/os/OS/' file.txt
considérer file.txt
comme
linux os
alors O / P est
unix os
-i
option enregistre les modifications en permanence ...
-e
drapeau représente l'expression. Vous voulez probablement le-i
drapeau qui signifiein-place
et je vous recommande fortement d'utilisersed -i.bak 's/../' filename