Используя sed, чтобы избавиться от символов <>,


18

У меня есть файл со строками следующим образом:

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

Я хотел бы использовать sed, чтобы удалить символы < ,и >из каждой строки

Я пытался использовать, sed 's/<>,//g'но это не сработало (ничего не изменилось). Нужно ли бежать от этих специальных символов. Можно ли удалить несколько символов одной sedкомандой?


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

3
@srikanthradix: Это не удаляет эти символы, а заменяет их пробелами. Вы хотите tr -d '<>,' ''(как в ответе Криса Дауна).
Кит Томпсон

1
@KeithThompson: tr -d '<>,'без '' в конце концов, не так ли?
пользователь неизвестен

@userunknown: Да, спасибо за исправление.
Кит Томпсон

Ответы:


43

С sed:

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

С tr:

tr -d '<>,'

2
Правильно, но я лично нахожу использование |в качестве разделителя немного запутанным. sed 's/[<>]//g'немного легче читать.
Кит Томпсон

@KeithThompson Я использую это для практичности. Я сталкиваюсь с литералом |(и, следовательно, вынужден избегать его) гораздо меньше, чем с литералом /.
Крис Даун

2
Честная точка зрения. С другой стороны, |также часто является метасимволом, используемым для чередования в некоторых синтаксисах регулярных выражений (хотя sedв особенности это необходимо \|). Лично, если мне нужно иметь дело с буквальными /символами, я обычно использую ,в качестве разделителя.
Кит Томпсон

1
Помимо упомянутых выше личных / специфических ситуаций, при использовании нестандартного разделителя есть одно внутреннее синтаксическое различие. Первый не / разделитель должен быть экранирован для каждого выражения диапазона sed , например:printf 'a\nb\nc\n' | sed -n '\|a|,\|b|p'
Peter.O

8

Попробуй это: sed 's/[<>,]//g'


Для чего нужны вертикальные полосы?
Пол Томблин

sed 's / [<|> |] / / g' - s выполняет поиск; / является разделителем; скобки [] позволяют искать более чем одну вещь; | вертикальная черта - это логическое или, а g - поиск по всему миру или по всему файлу.
Иман

3
Вам не нужны (или, действительно, вы хотите) |s внутри []. использовать 's/[<>,]//g'.
Кевин

2
Вам не нужна вертикальная черта. Все, что находится в квадратных скобках, ищется как список. sed 's/[<>,]/ /g'будет работать точно хорошо, кроме вашей идеи удалят также вертикальные полосы.
Пол Томблин

Чтобы добавить: может быть, вы хотите посмотреть на регулярные выражения, это один из самых простых примеров, но уже демонстрирующих силу.
Бернхард
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.