2012-03-07 15 views

Respuesta

13

Si la pregunta es "¿Cómo puedo imprimir solo las subcadenas que coincidan con una expresión regular específica usando sed?" entonces será realmente difícil de lograr (y no una solución obvia).

grep podría ser más útil en ese caso. La opción -o impresiones de cada parte correspondiente de una línea separada, -P permite PCRE sintaxis de expresiones regulares:

$> echo "a b _c d _e f" | grep -o -P "(\ *_[a-z]+)" 
_c 
_e 

Y finalmente

$> echo `echo "a b _c d _e f" | grep -o -P "(\ *_[a-z]+)"` 
_c _e 
+1

grep debian no parece tiene '-P' compilado en: -/ –

+3

@Let_Me_Be -E también funciona. – Kent

+1

También en macOS, use: 'grep -o -E ...' – davnicwil

0

Su hacky pero se puede usar esto para sed única versión:

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

SALIDA:

_c 
_e 
3

Identificar los patrones que usted quiere, rodeado de los patrones que no desee, y sólo aquellos emitir:

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

SALIDA:

_c _e 
Cuestiones relacionadas