Замена всех слов в строке, кроме тех, что соответсвуют шаблону. sed, awk

есть строка

14:24:14 текст @vp текст

Нужно с помощью sed или awk или других инструментов

на выходе оставить только @vp

т.е. заменить все слова, что не содержат @ на "", (@ - всегда в начале слова)

либо найти и вывести слова в которх есть @


Ответы (2 шт):

Автор решения: Владимир Uglevod

Прикольно, что есть этот сервис )

Решение

cat 200408.vp | grep "@" | tr " " "\n" | grep "@" | sort -u

выводим все строки в которых есть @

разделяем по пробелу

и снова выводим, но уже все слова в которых есть @

  • в моем случае полезно оставить только уникальные варианты

( опционально можно еще посчитать оличество вхождений wc -l )

Bash мощь )

→ Ссылка
Автор решения: Ainar-G

Вариант выдачи уникальных слов, начинающихся с @, на awk:

{
    for (f = 1; f <= NF; f++) {
        if ($f ~ /^@/) {
            good[$f] = 1;
        }
    }
}

END {
    for (w in good) {
        print(w);
    }
}

Дальше отправить в sort без -u.

→ Ссылка