0 votos

El reemplazo 'sed' no parece funcionar en la línea de comandos

El siguiente comando:

echo "/tmp/ansible_gN946Q/chronograf-1.4.0.1-1/etc/blue" | sed  's/(((chronograf|influxdb|kapacitor).[0-9\.-]*\/)|telegraf\/)/aefgae/g'

Salidas:

/tmp/ansible_gN946Q/chronograf-1.4.0.1-1/etc/blue

Cuando la salida esperada es:

/tmp/ansible_gN946Q/aefgaeetc/blue

Esto es extraño porque reemplaza bien en PCRE que sed debería ser compatible con, corrígeme si me equivoco.

Espero que alguien pueda señalar mi error en el sed comando de arriba.

0 votos

1voto

user3439894 Puntos 5883

Las siguientes obras:

sed -E 's:(((chronograf|influxdb|kapacitor).[0-9.-]*/)|telegraf/):aefgae:g'<<<'/tmp/ansible_gN946Q/chronograf-1.4.0.1-1/etc/blue'

Salidas:

/tmp/ansible_gN946Q/aefgaeetc/blue

Diferencias entre su aplicación y la mía:

  • Utilizando -E opción con sed
    • Interpretar las expresiones regulares como expresiones regulares extendidas (modernas) en lugar de expresiones regulares básicas (BRE). La página de manual re_format(7) describe completamente ambos formatos.
  • Utilizando <<< en lugar de echo y |
  • Utilizando : como separador en lugar de / en el sed expresión porque el entrada tiene / en él.
  • Utilizando ' en lugar de " alrededor de entrada por lo que no se produce ninguna expansión de la cáscara en entrada .

Nota: Todavía se puede utilizar echo y | sin embargo es un uso innecesario de echo cuando no es necesario utilizarlo. Por lo demás, las otras diferencias, utilizando -E y : como separador en lugar de / porque entrada tiene / en él, es realmente lo que arregla lo que está mal en su implementación.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X