sostituzione 'sed' non sembra funzionare sulla riga di comando

0

Il seguente comando:

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

Uscite:

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

Quando l'output previsto è:

/tmp/ansible_gN946Q/aefgaeetc/blue

Questo è strano perché sostituisce bene in PCRE , che sed dovrebbe essere compatibile con, correggimi se sbaglio.

Spero che qualcuno possa segnalare il mio errore nel comando sed sopra.

    
posta casibbald 16.01.2018 - 12:06
fonte

1 risposta

1

I seguenti lavori:

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

Uscite:

/tmp/ansible_gN946Q/aefgaeetc/blue

Differenze tra la tua implementazione e la mia:

  • Uso di -E opzione con sed
    • Interpretare le espressioni regolari come regolari (moderne) estese      espressioni piuttosto che espressioni regolari di base (BRE). Il      La pagina di manuale di re_format (7) descrive completamente entrambi i formati.
  • Uso di <<< anziché echo e |
  • Utilizzare : come separatore invece di / nell'espressione sed perché l'input ha / in esso.
  • Uso di ' invece di " attorno a input quindi nessuna espansione della shell si verifica su input .

Nota: potresti ancora utilizzare echo e | , tuttavia è un uso inutile di echo quando non è necessario utilizzarlo. Altrimenti, le altre differenze, utilizzando -E e : come separatore invece di / , poiché input ha / in esso, è davvero ciò che corregge cosa c'è che non va nella tua implementazione.

    
risposta data 16.01.2018 - 16:04
fonte

Leggi altre domande sui tag