2012-03-07 2 views

ответ

13

Если возникает вопрос: «Как напечатать только подстроки, которые соответствуют определенному регулярному выражению, используя 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 
+1

Debian Grep не кажется, есть '-P', скомпилированный в: -/ –

+3

@Let_Me_Be -E тоже работает. – Kent

+1

Также на macOS используйте: 'grep -o -E ...' – davnicwil

0

Его Hacky но вы можете использовать это для SED только версии:

echo "a b _c d _e f" | sed 's/ /\ 
/g' | sed -n '/_[a-z]/p' 

ВЫХОД:

_c 
_e 
3

Определить модели, которые вы хотите, окруженными шаблонов вы не хотите, и испускают только те:

echo "a b _c d _e f" | sed 's/[^_]*\s*\(_[a-z]\)[^_]*/\1 /g' 

ВЫВОД:

_c _e 
Смежные вопросы