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?


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

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'


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.