Verwenden von sed, um Zeichen <> loszuwerden,


18

Ich habe eine Datei mit folgenden Zeilen:

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

Ich möchte sed verwenden, um die Zeichen < ,und >aus jeder Zeile zu entfernen

Ich habe versucht, sed 's/<>,//g'aber es hat nicht funktioniert (es hat nichts geändert). Muss ich diesen Sonderzeichen entkommen? Ist es möglich, mehrere Zeichen mit einem einzigen sedBefehl zu löschen ?


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

3
@srikanthradix: Wenn diese Zeichen nicht entfernt werden, werden sie durch Leerzeichen ersetzt. Sie wollen tr -d '<>,' ''(wie in Chris Downs Antwort).
Keith Thompson

1
@ KeithThompson:, tr -d '<>,'ohne '' am Ende nicht?
Benutzer unbekannt

@userunknown: Ja, danke für die Korrektur.
Keith Thompson

Antworten:


42

Mit sed:

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

Mit tr:

tr -d '<>,'

2
Richtig, aber ich persönlich finde die Verwendung |als Trennzeichen etwas verwirrend. sed 's/[<>]//g'ist etwas leichter zu lesen.
Keith Thompson

@ KeithThompson Ich benutze es aus praktischen Gründen. Ich habe |es viel weniger mit dem Wörtlichen zu tun (und muss ihm daher entkommen) als mit dem Wörtlichen /.
Chris Down

2
Ein fairer Punkt. Andererseits |ist es auch oft ein Metazeichen , das in einigen Regexp-Syntaxen zur Abwechslung verwendet wird (obwohl dies sedinsbesondere erforderlich ist \|). Persönlich verwende /ich normalerweise ,als Trennzeichen , wenn ich mit wörtlichen Zeichen umgehen muss .
Keith Thompson

1
Abgesehen von den oben erwähnten persönlichen / spezifischen Situationen gibt es einen wesentlichen Syntaxunterschied bei der Verwendung eines nicht standardmäßigen Trennzeichens. Das erste Nicht- / Begrenzungszeichen muss für jeden Sed-Range- Ausdruck printf 'a\nb\nc\n' | sed -n '\|a|,\|b|p'
maskiert werden

8

Probier diese: sed 's/[<>,]//g'


Wofür sind die vertikalen Balken da?
Paul Tomblin

sed 's / [<|> |] / / g' - Das s führt die Suche durch; das / ist das Trennzeichen; die [] Klammern lassen uns nach mehr als einer Sache suchen; die | Der vertikale Balken ist ein logisches oder und das g ist die globale Suche oder die gesamte Datei.
Iman

3
Du brauchst (oder willst) das |s nicht in dir []. verwenden 's/[<>,]//g'.
Kevin

2
Sie brauchen keine vertikale Leiste. Alles in den eckigen Klammern wird als Liste gesucht. sed 's/[<>,]/ /g'wird genau funktionieren, war gut, außer Ihre Idee wird vertikale Balken ebenso entfernen.
Paul Tomblin

Füge hinzu: Vielleicht möchten Sie sich mit regulären Ausdrücken befassen, dies ist eines der einfachsten Beispiele, zeigt aber bereits die Kraft.
Bernhard
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.