Печатать только те части, которые соответствуют регулярному выражению
echo "a b _c d _e f" | sed 's/[ ]*_[a-z]\+//g'
Результат будет a b d f.
Теперь, как я могу повернуть его и напечатать только _c _e, не принимая ничего о остальной части строки?
Ответ 1
Если возникает вопрос: "Как напечатать только подстроки, которые соответствуют определенному регулярному выражению, используя sed?" то это будет очень трудно достичь (а не очевидное решение).
grep может быть более полезным в этом случае. Опция -o печатает каждую соответствующую часть в отдельной строке, -P включает синтаксис регулярного выражения PCRE:
$> echo "a b _c d _e f" | grep -o -P "(\ *_[a-z]+)"
_c
_e
И наконец
$> echo `echo "a b _c d _e f" | grep -o -P "(\ *_[a-z]+)"`
_c _e
Ответ 2
Определите нужные вам шаблоны, окруженные шаблонами, которые вы не хотите, и испускайте только те:
echo "a b _c d _e f" | sed 's/[^_]*\s*\(_[a-z]\)[^_]*/\1 /g'
ВЫВОД:
_c _e
Ответ 3
Его взломанный, но вы можете использовать его для версии sed:
echo "a b _c d _e f" | sed 's/ /\
/g' | sed -n '/_[a-z]/p'