Utiliser sed pour se débarrasser des personnages <>,

18

J'ai un fichier avec des lignes comme suit:

...
... <230948203[234]>, ...
... <234[24]>, ...
..

Je voudrais utiliser sed pour supprimer les caractères < ,et >de chaque ligne

J'ai essayé d'utiliser sed 's/<>,//g'mais cela n'a pas fonctionné (cela n'a rien changé). Dois-je échapper à ces caractères spéciaux. Est-il possible de supprimer plusieurs caractères à l'aide d'une seule sedcommande?

Amelio Vazquez-Reina
la source
2
bash-3.2$ echo "<230948203[234]>," | tr '<>,' ' '-> 230948203 [234] -EDITED Thanks to Paul
3
@srikanthradix: Cela ne supprime pas ces personnages, les remplace par des espaces. Vous voulez tr -d '<>,' ''(comme dans la réponse de Chris Down).
Keith Thompson
1
@KeithThompson:, tr -d '<>,'sans '' à la fin, non?
utilisateur inconnu
@userunknown: Oui, merci pour la correction.
Keith Thompson

Réponses:

43

Avec sed:

sed 's|[<>,]||g'

Avec tr:

tr -d '<>,'
Chris Down
la source
2
Exact, mais je trouve personnellement l'utilisation de |délimiteur un peu déroutante. sed 's/[<>]//g'est un peu plus facile à lire.
Keith Thompson
@KeithThompson Je l'utilise pour des raisons pratiques. Je me retrouve à traiter avec le littéral |(et donc à y échapper) beaucoup moins que je n'ai à traiter avec le littéral /.
Chris Down
2
Un juste point. D'un autre côté, |c'est aussi souvent un méta-caractère, utilisé pour l'alternance dans certaines syntaxes d'expression rationnelle (bien que cela soit sedparticulièrement nécessaire \|pour cela). Personnellement, si j'ai besoin de traiter des /caractères littéraux , je les utilise généralement ,comme délimiteur.
Keith Thompson
1
Mis à part les situations personnelles / spécifiques mentionnées ci-dessus, il existe une différence de syntaxe intrinsèque lors de l'utilisation d'un délimiteur non standard. Le premier non / délimiteur doit être échappé pour chaque expression de plage sed , par exemple:printf 'a\nb\nc\n' | sed -n '\|a|,\|b|p'
Peter.O
8

Essaye celui-là: sed 's/[<>,]//g'

Iman
la source
À quoi servent les barres verticales?
Paul Tomblin
sed 's / [<|> |] / / g' - Le s fait la recherche; le / est le délimiteur; les crochets [] nous permettent de rechercher plus d'une chose; le | la barre verticale est un ou logique et le g est de rechercher globalement ou l'ensemble du fichier.
Iman
3
Vous n'avez pas besoin (ou, en fait, voulez) le |s à l'intérieur []. utiliser 's/[<>,]//g'.
Kevin
2
Vous n'avez pas besoin d'une barre verticale. Tout ce qui se trouve entre crochets est recherché sous forme de liste. sed 's/[<>,]/ /g'fonctionnera exactement était bien, sauf que votre idée supprimera également les barres verticales.
Paul Tomblin
Pour ajouter: peut-être que vous voulez examiner les expressions régulières, c'est l'un des exemples les plus simples, mais qui démontre déjà la puissance.
Bernhard