Usando sed para se livrar dos caracteres <>,


18

Eu tenho um arquivo com linhas da seguinte maneira:

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

Eu gostaria de usar o sed para remover os caracteres < ,e >de todas as linhas

Eu tentei usar, sed 's/<>,//g'mas não funcionou (não mudou nada). Preciso escapar desses caracteres especiais. É possível excluir vários caracteres usando um único sedcomando?


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

3
@srikanthradix: Isso não remove esses caracteres, substitui-os por espaços. Você quer tr -d '<>,' ''(como na resposta de Chris Down).
Keith Thompson

1
@KeithThompson:, tr -d '<>,'sem '' no final, não?
desconhecido usuário

@userunknown: Sim, obrigado pela correção.
9788 Keith Thompson #

Respostas:


42

Com sed:

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

Com tr:

tr -d '<>,'

2
Correto, mas pessoalmente acho o uso de |um delimitador um pouco confuso. sed 's/[<>]//g'é um pouco mais fácil de ler.
Keith Thompson

@KeithThompson Eu uso isso por praticidade. Eu me pego lidando com literal |(e, portanto, tendo que escapar dela) muito menos do que tenho que lidar com literal /.
31712 Chris Down

2
Um ponto justo. Por outro lado, |também costuma ser um meta-caractere, usado para alternância em algumas sintaxes de expressão regular (embora sedem particular seja necessário \|). Pessoalmente, se eu precisar lidar com /caracteres literais , geralmente o uso ,como delimitador.
Keith Thompson

1
Além das situações pessoais / específicas mencionadas acima, há uma diferença de sintaxe intrínseca ao usar um delimitador não padrão. O primeiro / delimitador não deve ser precedido por cada intervalo sed expressão, por exemplo:printf 'a\nb\nc\n' | sed -n '\|a|,\|b|p'
Peter.O

8

Tente este: sed 's/[<>,]//g'


Para que servem as barras verticais?
Paul Tomblin

sed 's / [<|> |] / / g' - O s faz a pesquisa; o / é o delimitador; os colchetes [] vamos procurar mais de uma coisa; o | barra vertical é lógica ou eg é para procurar globalmente ou todo o arquivo.
Iman

3
Você não precisa (ou realmente quer) os |s dentro []. use 's/[<>,]//g'.
Kevin

2
Você não precisa de uma barra vertical. Qualquer coisa entre colchetes é pesquisada como uma lista. sed 's/[<>,]/ /g'funcionará exatamente como bem, exceto que sua ideia também removerá barras verticais.
Paul Tomblin

Para adicionar: talvez você queira procurar expressões regulares, este é um dos exemplos mais fáceis, mas já demonstra o poder.
Bernhard
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.