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?


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 '<>,'

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'


À 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.