Saya mencoba untuk menulis skrip shell untuk mengganti string SEARCH dengan string REPLACE di semua file direktori saat ini (direktori di mana skrip saya tetap).
Syarat yang saya miliki adalah: skrip harus mengganti 'string pencarian' menjadi 'ganti string' di semua file kecuali skrip shell saya.
Saya mencoba sed perintah di konsol. Itu bekerja seperti yang saya harapkan. Tetapi ketika saya menambahkan perintah sed ini ke skrip saya, itu melempar kesalahan.
Perintah dalam skrip saya (replace.sh) adalah:
search_str=is;
replace_str=IS;
sed -i.bak s/$search_str/$replace_str/g !(replace.sh)
Kesalahan yang saya dapatkan adalah:
./replace.sh: line 11: syntax error near unexpected token '('
./replace.sh: line 11: 'sed -i.bak s/$search_str/$replace_str/g !(replace.sh)'
Semoga Anda bisa membantu saya .. Terima kasih sebelumnya ..
command-line
bash
shell
sed
SILVIYA
sumber
sumber
shop
extglob denganshopt -s extglob
skrip Anda.Jawaban:
Anda hanya perlu mengaktifkan
extglob
skrip, setidaknya di titik itu.Saya sarankan Anda untuk menyimpan dan mengembalikan status extglob kalau-kalau skripnya panjang dan ada perintah lain yang memerlukan status opsi itu ... Tentu saja jika Anda menulis skrip Anda sendiri, Anda dapat memutuskan untuk menulisnya dengan extglob diaktifkan dan konsisten dengannya: jadi Anda hanya perlu menambahkan
shopt -s extglob
skrip sebelum baris itu (# 11).Info lebih lanjut dengan
help shopt
dari shell.sumber
Ini karena pola yang diperluas suka
!(replace.sh)
tidak diaktifkan. Tambahkanshopt -s extglob
ke skrip Anda.sumber
setelah bekerja sedikit dalam masalah Anda saya pikir saya mungkin punya solusinya
Saya telah menggunakan find dengan -maxdepth 1 top mendapatkan perubahan sed diterapkan ke semua file dalam folder di mana skrip berada. ! -merekam $ 0 membuat skrip menghindari digunakan pada dirinya sendiri
Salam
sumber
chmod u+x
pada skrip Anda dan Anda menjalankannya dengan./replace.sh
tetapi itu akan gagal jika Anda menjalankan skrip Anda dengan/bin/bash replace.sh
. PS> Kamu lupa menulis ekstensi di-i.bak
opsi, itu bisa berguna;)