'sed' değişimi komut satırında çalışmıyor gibi görünüyor


0

Aşağıdaki komut:

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

Çıktılar:

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

Beklenen çıktı:

/tmp/ansible_gN946Q/aefgaeetc/blue

Bu garip, çünkü PCRE’de para cezası yerini alıyor , seduyumlu olması gereken, yanlış olduğumda beni düzeltiyor.

Birisi sedyukarıdaki komutta hatamı gösterebilir umarım .


Yanıtlar:


1

Aşağıdaki işler:

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

Çıktılar:

/tmp/ansible_gN946Q/aefgaeetc/blue

Uygulamanızla benimki arasındaki farklar:

  • Kullanma -E seçeneği ilesed
    • Düzenli ifadeleri, temel normal ifadeler (BRE'ler) yerine genişletilmiş (modern) normal ifadeler olarak yorumlayın. Re_format (7) kılavuz sayfası her iki formatı da tamamen açıklar.
  • Kullanma <<<yerine echove|
  • Kullanılması :bir şekilde Seperatör yerine /de sed ifade nedeniyle giriş vardır /içinde.
  • Kullanma 'yerine "etrafında girişine hiçbir kabuk genişleme gerçekleşir girdi .

Not: Hala kullanabilirsiniz echo, |ancak echone zaman kullanılması gerekmediğine ihtiyaç yoktur. Aksi takdirde, kullanan başka farklılıklar, -Eve :bir şekilde ayırıcı yerine /, çünkü giriş vardır /onun içinde, uygulamanızda sorunun ne giderir gerçekten ne olduğunu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.