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.