Usando sed per sbarazzarsi dei personaggi <>,


18

Ho un file con le linee come segue:

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

Vorrei usare sed per rimuovere i personaggi < ,e >da ogni riga

Ho provato a usare sed 's/<>,//g'ma non ha funzionato (non ha cambiato nulla). Devo scappare da questi personaggi speciali. È possibile eliminare più caratteri utilizzando un singolo sedcomando?


2
bash-3.2$ echo "<230948203[234]>," | tr '<>,' ' '-> 230948203 [234] -EDITED Thanks to Paul

3
@srikanthradix: che non rimuove quei caratteri, li sostituisce con spazi. Tu vuoi tr -d '<>,' ''(come nella risposta di Chris Down).
Keith Thompson,

1
@KeithThompson:, tr -d '<>,'senza "" alla fine, no?
utente sconosciuto

@userunknown: Sì, grazie per la correzione.
Keith Thompson

Risposte:


43

Con sed:

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

Con tr:

tr -d '<>,'

2
Corretto, ma personalmente trovo |un po 'confuso l'uso di come delimitatore. sed 's/[<>]//g'è un po 'più facile da leggere.
Keith Thompson,

@KeithThompson Lo uso per praticità. Mi trovo a occuparmi di letterale |(e quindi di doverlo sfuggire) molto meno di quanto non abbia a che fare con letterale /.
Chris Down,

2
Un punto giusto. D'altra parte, |è spesso anche un meta-carattere, usato per l'alternanza in alcune sintassi regexp (anche se sedin particolare ne ha bisogno \|). Personalmente, se devo occuparmi di /personaggi letterali , di solito lo uso ,come delimitatore.
Keith Thompson

1
A parte le situazioni personali / specifiche sopra menzionate, esiste una differenza di sintassi intrinseca quando si utilizza un delimitatore non standard. Il primo non / delimitatore deve essere printf 'a\nb\nc\n' | sed -n '\|a|,\|b|p'
escluso

8

Prova questo: sed 's/[<>,]//g'


A cosa servono le barre verticali?
Paul Tomblin,

sed 's / [<|> |] / / g' - La s fa la ricerca; il / è il delimitatore; le parentesi [] ci consentono di cercare più di una cosa; il | la barra verticale è una logica oe g è la ricerca globale o dell'intero file.
Iman,

3
Non hai bisogno (o, in effetti, vuoi) di |dentro di te []. usare 's/[<>,]//g'.
Kevin,

2
Non hai bisogno di una barra verticale. Qualsiasi elemento tra parentesi quadre viene cercato come elenco. sed 's/[<>,]/ /g'funzionerà esattamente, ma la tua idea rimuoverà anche le barre verticali.
Paul Tomblin,

Per aggiungere: forse vuoi esaminare le espressioni regolari, questo è uno degli esempi più semplici, ma già dimostra il potere.
Bernhard,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.