Удалить все вхождения любого слова, соответствующего частичной строке в sed

предположим, что у меня есть следующая строка:

group blue:green yellow green redtomblue black !greyTOMwhilte !purple redblue

мне нужно удалить из него все слова, которые содержат строку "tom" или " TOM " с помощью sed.

мне удалось зайти так далеко:

sed 's/^ *(.*)[!]*[A-Za-z0-9_]*[tT]{1}[oO]{1}[mM]{1}[A-Za-z0-9_]*(.*)/ /g'

но это только удаляет последние явление, не все из них. Используя мой пример выше результат:

group blue:green yellow green redtomblue black !grey  !purple redblue

как я могу использовать sed удалить любое слово, содержащее подстроки "tom"или " TOM"?

28
задан DMA57361
07.11.2022 1:29 Количество просмотров материала 3667
Распечатать страницу

1 ответ

как насчет этого?

sed 's/\S*\(tom\|TOM\)\S*//g'

resp. в не-GNU версии sed это должно работать:

sed 's/[a-zA-Z0-9_!]*[Tt][Oo][Mm][a-zA-Z0-9_!]*//g'

это заменит все слова (т. е. строки, начинающиеся с 0 или более пробельных символов (\S), затем tom или TOM и снова 0 или более пробельных символов) с пустой строкой.

Вероятно, вам также следует удалить двойные пробелы:

sed 's/\S*\(tom\|TOM\)\S*//g;s/\(\s\)\s*//g'
1
отвечен bmk 2022-11-08 09:17

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх