echo "a b _c d _e f" | sed 's/[ ]*_[a-z]\+//g'
печать только части, которые соответствуют регулярному выражению
Результат будет a b d f
.
Теперь, как я могу его обернуть и распечатать только _c _e
, не принимая ничего о остальной части линии?
echo "a b _c d _e f" | sed 's/[ ]*_[a-z]\+//g'
печать только части, которые соответствуют регулярному выражению
Результат будет a b d f
.
Теперь, как я могу его обернуть и распечатать только _c _e
, не принимая ничего о остальной части линии?
Если возникает вопрос: «Как напечатать только подстроки, которые соответствуют определенному регулярному выражению, используя 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
Его Hacky но вы можете использовать это для SED только версии:
echo "a b _c d _e f" | sed 's/ /\
/g' | sed -n '/_[a-z]/p'
ВЫХОД:
_c
_e
Определить модели, которые вы хотите, окруженными шаблонов вы не хотите, и испускают только те:
echo "a b _c d _e f" | sed 's/[^_]*\s*\(_[a-z]\)[^_]*/\1 /g'
ВЫВОД:
_c _e
Debian Grep не кажется, есть '-P', скомпилированный в: -/ –
@Let_Me_Be -E тоже работает. – Kent
Также на macOS используйте: 'grep -o -E ...' – davnicwil