Використовуючи 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
Окрім згаданих вище особистих / конкретних ситуацій, існує одна властива синтаксична різниця при використанні нестандартного роздільника. Перший printf 'a\nb\nc\n' | sed -n '\|a|,\|b|p'
нерозмежувач

8

Спробуйте це: sed 's/[<>,]//g'


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

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

3
Вам не потрібно (або, справді, хочете) |зсередини []. використання 's/[<>,]//g'.
Кевін

2
Вам не потрібна вертикальна смуга. Що-небудь у квадратних дужках шукається як список. sed 's/[<>,]/ /g'буде працювати точно було добре, за винятком того, що ваша ідея також видалить вертикальні смуги.
Пол Томблін

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