Bendera bekerja sama dengan cara yang berlawanan dengan yang Anda harapkan. Dokumentasi /e
adalah, sebagai catatan:
Perintah ini memungkinkan seseorang untuk menyalurkan input dari perintah shell ke ruang pola. Jika substitusi dibuat, perintah yang ditemukan di ruang pola dieksekusi dan ruang pola diganti dengan keluarannya. Baris baru yang tertinggal ditekan; hasil tidak ditentukan jika perintah yang akan dieksekusi berisi karakter nol. Ini adalah ekstensi sed GNU.
Itu ditulis dengan sedikit berbelit-belit. Artinya adalah, setelah menyelesaikan s///
perintah untuk baris ini, jika ada perubahan, baris (baru) dijalankan sebagai perintah dan keluarannya digunakan sebagai pengganti baris ini.
Jadi untuk perintah yang Anda berikan:
echo AAA | sed -r 's/A/echo B/ge'
itu pertama menggantikan setiap A
dengan echo B
, dan lalu mengeksekusi hasilnya sebagai perintah. Ini memiliki (secara kasar) efek yang sama seperti:
echo AAA | sed -r 's/A/echo B/g' | sh
GNU sed
tidak secara langsung mendukung mode yang Anda inginkan, meskipun Anda dapat memalsukannya dengan skrip yang lebih rumit jika diinginkan. Sebagai alternatif, /e
Perl pengubah ke s
perintah memang memiliki perilaku yang Anda cari, tetapi dengan ekspresi Perl sebagai gantinya.
Anda adalah mendapatkan banyak penggantian, tetapi Anda tidak mendapatkan banyak eksekusi. Pola dijalankan setelah semua penggantian dilakukan.
Tanpa e
tandai hasil
echo AAA | sed -r 's/A/echo B/g'
adalah
echo Becho Becho B
Jadi itulah baris perintah yang dijalankan jika Anda melakukannya sertakan e
bendera, yang setara dengan
echo 'Becho Becho B'
Untuk mendapatkan 'BBB' dari 'AAA' menggunakan perintah 's' GNU sed dengan bendera 'e', seseorang dapat melakukan ini:
echo AAA | sed -re 's/A/echo -n B;/ge'
'AAA' diganti dengan 'echo -n B;echo -n B; echo -n B;', yang, ketika akhirnya dieksekusi, mengarah ke 3 perintah gema yang berjalan secara berurutan, satu untuk setiap kecocokan global. '-n' menghilangkan karakter umpan baris dari keluaran gema, membuat 'B berakhir pada satu baris (tetapi sed menambahkan satu umpan baris dengan sendirinya saat akhirnya mencetak ruang pola).