echo "a b _c d _e f" | sed 's/[ ]*_[a-z]\+//g'
de impresión únicas partes que coinciden con la expresión regular
El resultado será a b d f
.
Ahora, ¿cómo puedo darle la vuelta, y solo imprimir _c _e
, sin asumir nada sobre el resto de la línea?
echo "a b _c d _e f" | sed 's/[ ]*_[a-z]\+//g'
de impresión únicas partes que coinciden con la expresión regular
El resultado será a b d f
.
Ahora, ¿cómo puedo darle la vuelta, y solo imprimir _c _e
, sin asumir nada sobre el resto de la línea?
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
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
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
grep debian no parece tiene '-P' compilado en: -/ –
@Let_Me_Be -E también funciona. – Kent
También en macOS, use: 'grep -o -E ...' – davnicwil