'sed' no parece funcionar en la línea de comando

0

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 el resultado esperado es:

/tmp/ansible_gN946Q/aefgaeetc/blue

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

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

    
pregunta casibbald 16.01.2018 - 12:06

1 respuesta

1

Los siguientes trabajos:

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 tu implementación y la mía:

  • Usar la opción -E con sed
    • Interpreta expresiones regulares como extendido (moderno) regular      Expresiones en lugar de expresiones regulares básicas (BRE). los      La página del manual de re_format (7) describe completamente ambos formatos.
  • Usar <<< en lugar de echo y |
  • Usar : como separador en lugar de / en la expresión sed porque la entrada tiene / en it.
  • Usar ' en lugar de " alrededor de input , por lo que no se produce una expansión de shell en input .

Nota: todavía puedes usar echo y | , sin embargo, es un uso innecesario de echo cuando no es necesario usarlo. De lo contrario, las otras diferencias, al utilizar -E y : como separator en lugar de / , porque input tiene / , es realmente lo que soluciona lo que está mal en tu implementación.

    
respondido por el user3439894 16.01.2018 - 16:04

Lea otras preguntas en las etiquetas