2009-10-16 4 views
2

J'ai une sortie:Comment puis-je utiliser pour remplacer tr '-' string

-- 
out1 
-- 
out2 
-- 
out3 

Je veux obtenir la sortie:

out1 
out2 
out3 

Je pensais que l'utilisation:

tr '--' '' 

mais il ne reconnaît pas '-' comme la première chaîne que je veux remplacer. Comment puis-je résoudre ceci?

Répondre

6
cat file | sed '/^--/d' 
+5

aucun chat besoin. sed '/^-/d' fichier – ghostdog74

+0

Et la commande 'd' à sed est assez non-idiomatique. La solution de grep de Jerry va être plus familière à la plupart des gens. –

7

Pourquoi ne pas utiliser grep -v "^--$" yourfile.txt?

2

une autre façon avec awk

awk '!/^--$/' file 
+0

Ou, 'awk '$ 0! =" - "' fichier'. –

0

Le mieux que vous pouvez faire avec tr est de supprimer les traits d'union laissant des lignes vides. La meilleure façon de faire ce que vous voulez est Amro la réponse en utilisant sed. Il est important de se rappeler que tr traite des listes de caractères plutôt que des chaînes de caractères multiples, donc il ne sert à rien de mettre deux traits d'union dans vos paramètres.

$ tr -d "-" textfile 
out1 

out2 

out3 

Cependant, afin d'avoir tr des traits d'union de la poignée et des caractères supplémentaires, vous devez mettre fin aux options à l'aide -- ou mettre le trait d'union après le premier caractère. Disons que vous voulez vous débarrasser de traits d'union et lettre o:

$ tr -d "-o" textfile 
tr: invalid option -- 'o' 
Try `tr --help' for more information. 

$ tr -d -- "-o" textfile 
ut1 

ut2 

ut3 

$ tr -d "o-" textfile 
ut1 

ut2 

ut3 

Il est souvent une bonne idée d'utiliser la terminaison d'option -- lorsque la liste de caractères est une variable si mauvaise données ne crée pas d'erreurs inutilement. Cela est également vrai pour les commandes autres que tr.

tr -d -- $charlist $file 
-1

Vous pouvez faire la même chose avec grep ainsi:

cat filename |grep -v "\--" 
+0

Utilisation inutile de 'cat'. (Et non, je ne suis pas le downvoter). –

Questions connexes