удалить текст между разделителями, несколько раз в каждой строке

Мне нужно удалить текст между разделителями «‹» и «>», но в каждой строке моего текстового файла их несколько.

Например, я хочу превратить это:

person 1, person 2<[email protected]>, person 3<[email protected]>, person 4<[email protected]>`

В это:

person 1, person 2, person 3, person 4  

Я пытался использовать несколько вещей, в том числе sed:

sed -e 's/<.*>//' filename.csv

но это удаляет все между первым < и последним >, что дает результат person 1, person 2.


person unifyeel    schedule 23.03.2019    source источник
comment
Регулярное выражение sed 's/<.*>//g' file будет работать, но только если есть только один адрес электронной почты, потому что .* является жадным и соответствует самой длинной возможной строке. Однако, если вместо этого вы используете sed 's/<[^>]*>//g' file, регулярное выражение удалит все строки, начинающиеся с <, и все остальное до следующего >.   -  person potong    schedule 23.03.2019
comment
Имеет смысл. Спасибо, что нашли время объяснить, что происходит.   -  person unifyeel    schedule 23.03.2019


Ответы (2)


вы можете использовать отрицательный класс символов в своем регулярном выражении:

sed 's/<[^>]*>//g' filename.csv
person oguz ismail    schedule 23.03.2019

Если вы хотите присоединиться к темной стороне, Perl позволяет указать нежадные подстановочные знаки с помощью ?:

perl -pe 's/<.*?>//g' filename.csv
person Burrito    schedule 23.03.2019
comment
Это тоже отлично сработало! Я определенно ценю темную сторону. - person unifyeel; 23.03.2019