Używając sed, aby pozbyć się znaków <>,

18

Mam plik z następującymi liniami:

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

Chciałbym użyć sed, aby usunąć znaki < ,i >z każdej linii

Próbowałem użyć, sed 's/<>,//g'ale to nie działało (nic nie zmieniło). Czy muszę uciec od tych znaków specjalnych. Czy można usunąć wiele znaków za pomocą jednego sedpolecenia?

Amelio Vazquez-Reina
źródło
2
bash-3.2$ echo "<230948203[234]>," | tr '<>,' ' '-> 230948203 [234] -EDITED Thanks to Paul
3
@ srikanthradix: To nie usuwa tych znaków, zastępuje je spacjami. Chcesz tr -d '<>,' ''(jak w odpowiedzi Chrisa Downa).
Keith Thompson
1
@KeithThompson: tr -d '<>,'bez końcówki „”, nie?
użytkownik nieznany
@userunknown: Tak, dziękuję za korektę.
Keith Thompson

Odpowiedzi:

43

Z sed:

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

Z tr:

tr -d '<>,'
Chris Down
źródło
2
Zgadza się, ale osobiście uważam, że użycie |jako separatora jest nieco mylące. sed 's/[<>]//g'jest nieco łatwiejszy do odczytania.
Keith Thompson
@KeithThompson Używam go ze względów praktycznych. Uważam, że mam do czynienia z dosłownością |(a zatem muszę z niej uciec) znacznie mniej niż z dosłownością /.
Chris Down,
2
Sprawiedliwy punkt. Z drugiej strony |często jest także meta-znakiem, używanym do zmiany w niektórych składniach wyrażeń regularnych (chociaż jest to sedszczególnie potrzebne \|). Osobiście, jeśli muszę radzić sobie z literalnymi /znakami, zwykle używam ,jako separatora.
Keith Thompson
1
Oprócz osobistych / specyficznych sytuacji wymienionych powyżej, istnieje jedna istotna różnica w składni, gdy używa się niestandardowego separatora. Pierwszy printf 'a\nb\nc\n' | sed -n '\|a|,\|b|p'
znak nie będący
8

Spróbuj tego: sed 's/[<>,]//g'

Iman
źródło
Do czego służą pionowe paski?
Paul Tomblin
sed 's / [<|> |] / / g' - s wykonuje wyszukiwanie; / jest ogranicznikiem; nawiasy [] pozwalają nam szukać więcej niż jednej rzeczy; | pionowy pasek jest logiczny lub g ma przeszukiwać globalnie lub cały plik.
Iman
3
Nie potrzebujesz (a nawet nie chcesz) tych |w sobie []. użyć 's/[<>,]//g'.
Kevin
2
Nie potrzebujesz pionowego paska. Wszystko w nawiasach kwadratowych jest wyszukiwane jako lista. sed 's/[<>,]/ /g'będzie działał dokładnie dobrze, ale twój pomysł usunie również pionowe paski.
Paul Tomblin
Aby dodać: może chcesz spojrzeć na wyrażenia regularne, jest to jeden z najłatwiejszych przykładów, ale już demonstrujesz siłę.
Bernhard