bash supprimer une ligne d'un fichier, de façon permanente
J'ai le code suivant pour trouver une chaîne de caractères dans un fichier, puis supprimez la ligne qui contient la chaîne de caractères.
echo `sed /$string/d file.txt` > file.txt
le problème est que si, à l'origine file.txt contient:
a
b
c
après la suppression de "un" (chaîne de caractères=a) file.txt deviendra
b c
au lieu de
b
c
quelqu'un peut-il m'aider?
Vous devez vous connecter pour publier un commentaire.
C'est à cause de la backticks. Faire ceci à la place:
Remarque, si vous voulez faire cela en place, vous devez utiliser
-i
àsed
comme>
va détruire le fichier avant desed
de le lire.$string
à partir d'expressions régulières caractères en premier?$string
contient des caractères qui le shell trouve important, par exemple!
. En gros, si le contenu de$string
est inconnu, vous devez soigneusement échapper à la fois regex et shell caractères significatifs. Merci pour ça.Vous n'avez pas besoin de la
echo
wrap, essayez simplement:Vous besoin de citer la sortie de la commande:
echo-n "
sed /$string/d file.txt
" > file.txtsed a une option d'édition. Il est plus convenable de les utiliser dans votre senario.
par exemple,
Pour le problème de votre cas, car la sortie de ` n'est pas entre guillemets, de couper un mot qui est fait, par bash. Et les retours à la ligne sont supprimés.
Pour l'utilisation de l'écho dans ce cas, faites comme ceci: