GNU/Linux >> Belajar Linux >  >> Ubuntu

Bagaimana Menyimpan Pola yang Cocok Menjadi Variabel Menggunakan Perintah 'sed'?

Saya mencoba menemukan pola menggunakan sed perintah di file.txt antara char1 pertama dan char2 dan kemudian menggantinya dengan string. seperti di bawah ini dengan echo contoh modus:

echo "This X is test Y. But X is not test Y." | sed 's/X[^Y]*Y/REPLACE/'

Saya juga perlu menyimpan pola yang cocok (seperti is test {<–spasi di sekitar penting} ) dalam sebuah variabel.

Jawaban yang Diterima:

Berikut adalah permintaan tunggal sed yang menulis baris yang direvisi ke stdout sementara pada saat yang sama menyimpan teks yang dihapus dalam variabel shell var :

$ var=$(echo "This X is test Y. But X is not test Y." | sed -nr 'h;s/[^X]*X([^Y]*)Y.*/\1/;p;x;s/X[^Y]*Y/REPLACE/;w /dev/stderr') 2>&1
This REPLACE. But X is not test Y.

Nilai var adalah:

$ echo "==$var=="
== is test ==

Penjelasan:

  • h

    Perintah ini menyalin pola saat ini ke ruang penahanan.

  • s/[^X]*X([^Y]*)Y.*/\1/;p

    Ini menghapus semuanya dari ruang pola kecuali teks di antara X first pertama dan Y termasuk spasi apapun. Ini kemudian dicetak ke stdout. Ini adalah output yang ditangkap oleh shell dan ditetapkan ke var .

  • x

    Ini menyalin ruang penahan kembali ke ruang pola. Ketika ini selesai, ruang pola berisi salinan dari baris input asli.

  • s/X[^Y]*Y/REPLACE/; w /dev/stderr

    Substitusi dilakukan dan hasilnya ditulis ke stderr .

  • 2>&1

    Setelah shell menangkap stdout ke dalam var , ini memerintahkan shell untuk menyalin stderr (yang memiliki baris dengan REPLACE) ke stdout.

Selain menangani variabel var

Variabel var termasuk spasi awal dan akhir. Jika shell selanjutnya menjadi subjek var untuk pemisahan kata, spasi ini akan dihapus. Untuk mencegahnya, ketika var direferensikan, lakukan di dalam tanda kutip ganda, seperti pada contoh di atas.


Ubuntu
  1. Bagaimana Kami Menjalankan Perintah yang Disimpan Dalam Variabel?

  2. Bagaimana Memulai Anydesk Di Ubuntu Menggunakan Command Prompt?

  3. Bagaimana cara mengembalikan database MySQL menggunakan perintah di SSH?

  1. Cara Menetapkan Output dari Perintah Linux ke Variabel

  2. Cara Menyimpan Output Perintah ke File di Linux

  3. Bagaimana cara mengatur variabel lingkungan dalam GDB menggunakan perintah Shell?

  1. Cara Memeriksa Versi Ubuntu Menggunakan Command Line

  2. Cara Reboot Linux Menggunakan Command Line

  3. Menggunakan perintah cp di shell linux, bagaimana cara menyalin seluruh direktori ke direktori lain?