2010-08-24 4 views
1

J'essaie de supprimer une ligne contenant un motif particulier dans un fichier texte. j'ai le code suivant qui ne fonctionne pasSuppression de texte à l'aide de grep

`grep -v "$varName" config.txt` 

quelqu'un peut me dire comment je peux le faire fonctionner correctement, je veux le faire fonctionner à l'aide grep et sed non

+2

Membre depuis 5 mois. Pas de votes, pas de réponses, a posé 5 questions et n'a accepté aucune réponse dans aucune d'entre elles. @ mrblibby, vous êtes ce que nous appelons un leecher. –

+1

"qui ne fonctionne pas" ne nous aide pas beaucoup. Veuillez publier des messages d'erreur spécifiques ou des façons spécifiques dont le résultat diffère de ce qui était attendu. Utilisez-vous les backticks dans le cadre de votre commande? Si oui, c'est là que votre problème est. –

+0

Lorsque vous exécutez cela, je suis sûr qu'il est juste sortie toutes les lignes du fichier moins tout ce qui contient $ varName. Vous devrez alors diriger cette sortie vers un autre fichier et ensuite 'mv' qui retournera au fichier original. –

Répondre

-1

essayer d'utiliser EV-

grep -Ev 'item0|item1|item2|item3' 

Cela supprimera les lignes contenant l'élément [0-3]. laissez-moi savoir si cela aide

+1

grep ne supprime rien. Il imprime des lignes qui correspondent ou des lignes qui ne correspondent pas. Vous devrez rediriger la sortie afin de sauvegarder ce qui est imprimé. –

+0

Pour clarifier, les drapeaux utilisés ci-dessus diront à grep '-E' d'utiliser une expression étendue (correcte dans ce cas) et' -v' qui transforme grep en un "tout sauf ... ce truc". Cette méthode pourrait être utilisée ici, mais pas comme le voulait l'OP. Vous devez utiliser cette commande, puis rediriger la sortie dans un fichier. Cependant, vous ne pouvez pas greffer directement dans le même fichier, vous devrez donc grep> un autre fichier, puis copier le contenu. 'sed' est une meilleure suggestion. –

3

grep ne modifie pas les fichiers. Le mieux que vous pouvez faire si vous insistez sur l'utilisation de grep et non sed est

grep -v "$varName" config.txt > $$ && mv $$ config.txt 

Notez que j'utilise $$ comme nom de fichier temporaire, car il est le pid de votre script bash, et donc probablement pas un nom de fichier va être utilisé par un autre script bash. Je vous encourage à utiliser $$ dans les noms de fichiers temporaires dans bash, en particulier ceux qui pourraient être exécutés plusieurs fois simultanément.

+0

Mieux encore, utilisez l'utilitaire 'mktemp'. – zwol

2

vous pouvez utiliser sed, avec en place -i

sed -i '/pattern/d' file