web-dev-qa-db-fra.com

Supprimer toutes les lignes contenant une barre oblique inverse à partir d'un fichier texte

J'ai un fichier qui a un contenu comme celui-ci:

Apple
b\all
cat
\34
Egg

Je veux supprimer toutes les lignes contenant des barres obliques inverses. J'ai essayé d'utiliser

sed '/\/d' pdataf.txt

Mais ça n'a pas marché. Que devrais-je essayer?

8
user110327

Vous devez juste échapper à la barre oblique inverse (échapper à l'évasion!)

$ sed '/\\/d' pdataf.txt
Apple
cat
Egg
11
Zanna

grep, imprimant toutes les lignes n'ayant pas \:

grep -v '\\' pdataf.txt

De même awk:

awk '!/\\/' pdataf.txt
9
heemayl

Vous devez échapper à la barre oblique inversée (caractère d'échappement) pour pouvoir la remplacer. Et si votre version de sed le prend en charge, l’option -i (in-situ) effectuera les modifications de votre fichier sans que vous ayez à fournir un fichier intermédiaire. De plus, si vous utilisez l'option -i, notez qu'elle accepte une extension de fichier de sauvegarde (recommandée!). Toutefois, si vous n'en fournissez pas, il est utile de faire précéder votre commande sed avec -e pour informer sed que vous n'utilisez pas. une extension de fichier de sauvegarde.

Mettre tous ensemble:

# Run sed to remove lines with backslash in them

$ sed -i -e '/\\/d' pdataf.txt

# Cat your file to confirm edits

$ cat pdataf.txt
Apple
cat
Egg
2
m0j0hn