Est-ce possible? J'ai lu quelque part que la commande suivante le ferait:
sed -e [commande] [fichier]
mais il semblait faire la même chose que juste
sed [commande] [fichier]
(il n'a pas enregistré les modifications). Y at-il un moyen de faire cela en utilisant sed?
-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
Réponses:
Je pense que vous recherchez
-i
:Par exemple:
Si vous fournissez un suffixe, cela créera un fichier de sauvegarde:
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érentessed
implémentations.la source
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écutionsed -i 's/o/X/g' foo.txt
. Cependant, fournir une extension, commesed -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
la source
-e
l'option est pour l'exécution de plusieurssed
commandesconsidérer
file.txt
commealors O / P est
-i
option enregistre les modifications en permanence ...la source