sed

Contoh Bash Sed

Contoh Bash Sed
Bash membolehkan anda melakukan penggantian corak menggunakan pengembangan pemboleh ubah seperti ($ var / pattern / penggantian). Oleh itu, adakah sed seperti ini (sed-e / pola / penggantian / '). Namun, ada lebih banyak hal daripada menggantikan corak dalam fail teks.  Di sini kita akan menemui semula sed, sebagai contoh, dengan perintah dan aliran kerja yang setara untuk membantu tugas sehari-hari.

Persediaan untuk contoh sed

Berikut adalah panduan ringkas untuk menyiapkan contohnya, yang akan saya cuba untuk tidak membuat terlalu banyak.

"Kata-kata" adalah fail teks yang mengandungi nombor 1 hingga 100. Sekiranya anda tidak pasti perintah untuk membuatnya, lihat Fungsi eksport untuk xargs di Bash Export Command. Anda tidak akan pernah tahu bahawa ini mungkin berlaku dalam temu ramah skrip shell anda yang seterusnya.

"Bar" adalah fail teks yang mengandungi satu baris -.

"Old-php" adalah fail teks yang mengandungi baris PHP lama yang akan rosak di php7 atau lebih baru. (Petunjuk: ereg)

Perhatikan bahawa semua fungsi yang dijelaskan di atas boleh didapati di bawah di Catatan pada fungsi untuk penyediaan.

Contohnya dengan perintah yang setara

Dalam persekitaran baris perintah, anda akan dapati terdapat lebih daripada satu penyelesaian untuk tugas tertentu. Walau bagaimanapun, sebahagian besarnya, anda ingin mengikuti jalan yang menghasilkan rintangan paling sedikit. Berikut adalah senarai contoh perintah sed dengan perintah setara yang sesuai, di mana beberapa akan dibahas secara terperinci di bawah.

1. Cetak garis rawak (bersamaan dengan mengisih -R - | kepala -1)

sed -n "$ ((RANDOM% 100)) p" -

2.Cetak baris terakhir dalam fail (bersamaan dengan kepala -1 -)

sed -n '$ p' -

3. Cetak 10 baris pertama dalam fail (bersamaan dengan kepala -n 10 -)

sed '10q' -

4. Cetak baris pertama dalam fail (bersamaan dengan ekor -1 -)

sed -n '1p' -

5. Padamkan semua contoh watak (bersamaan dengan tr-hapus '0' -, di mana 0 adalah watak yang ingin kita hapuskan)

sed -e 's / 0 // g' -

6. Tukar fail csv ke tsv (bersamaan dengan tr ', "\ t' -)

sed -e 's /, / \ t / g' -

7.Tambahkan baris ke fail (setara dengan bar kucing -)

sed '$ a ---' -

8. Garis tambah ke fail (setara dengan bar - bar)

sed '1i ---' -

9. Cetak semua baris dalam fail (bersamaan dengan kucing -)

sed -n -e 'p' -

10. Cetak garis yang sepadan dengan corak (bersamaan dengan grep -e '^ 1' -)

sed -n -e '/ ^ 1 / p' -

11. Padamkan garis yang sepadan dengan corak (setara dengan grep -v -e '^ 1' -)

sed-e '/ ^ 1 / d' -

12. Dapatkan bilangan baris dalam fail (bersamaan dengan wc -l -)

sed -n -e '$ =' -

13. Tulis ke fail di latar belakang (perintah setara tee)

sed "w $ 1" -

Contohnya menggunakan sed untuk melaksanakan perintah tee

Tepat di atas, ada contoh berlabel Tulis ke fail di latar belakang. Jenis bunyi seperti arahan tee. Baiklah. Di sini kita akan memperluas bagaimana menerapkan fungsi untuk menggantikan tee di bash menggunakan sed.

Perintah

tee ()

uji $ # -eq 1 || kembali;
sed "w $ 1" -

utama ()

seq 10 | tee sepuluh;
kucing sepuluh

utama

Pengeluaran

1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10

Di sini anda akan melihat dua senarai bilangan bulat dari 1 hingga 10. Yang pertama adalah dari perintah seq. Yang kedua kami dapatkan dari kucing fail yang ditulis dalam tee. Saya tahu ia tidak masuk akal tetapi berjaya!

Contohnya menggunakan sed untuk mencetak garis rawak dalam fail

Anggaplah kita mahu mencetak garis rawak dalam fail menggunakan bash dan sedikit sed. Bolehkah kita melakukannya? Ya kita boleh! Ini caranya.

Laksanakan fungsi yang

  1. Mendapat bilangan baris dalam fail, L
  2. Menghasilkan nombor rawak antara 1 dan L, R
  3. Cetakan R

Fungsi mengharapkan input disalurkan dari luar.

Perintah

sebilangan baris ()

fungsi lc ()

sed -n -e '$ =' -
;
garis cetak fungsi ()

sed -n -e "$ 1 p" -
;
temp = $ (mktemp);
kucing -> $ temp;
kucing $ temp | garis cetak $ ((RANDOM% $ (kucing $ temp | lc) + 1));
rm $ temp

Contoh penggunaan (1)

seq 100 | _

Keluaran (1)

35

Contoh penggunaan (2)

curl https: // linuxhint.com / bash_cut_command / - senyap | label jalur | sebilangan

Lihat contoh di bawah, menggunakan sed untuk melucutkan tag HTML. Perhatikan bahawa contoh di atas kadang-kadang mengembalikan kosong untuk baris kosong. Sebagai latihan, ia dapat ditingkatkan.

Menggunakan sed untuk mencetak baris dalam fail

Anggaplah bahawa anda ingin melaksanakan fungsi dalam bash untuk mencetak baris tertentu dalam fail. Mencuba mencetak satu baris dalam fail menggunakan gelung dalam bash, kepala, ekor, atau awk terlalu banyak kerja untuk mencetak garis dalam fail. Perkara yang baik yang kita ada. Fungsi yang dihasilkan menggunakan sed adalah seperti berikut.

Perintah

garis cetak ()

sed -n "$ 1 p" -

Sekarang mari kita lihat apa yang berlaku apabila kita menggunakan garis cetak pada perkataan.

Perintah

perkataan | garis cetak 50

Pengeluaran

50

baik. Nampak baik tapi mari kita mencuba sesuatu yang kelihatan tidak remeh.

Perintah

menyatakan -xf perkataan
menyatakan -xf garis cetak
seq 1 10 $ (perkataan | wc -l) | xargs -i bash -c "words | print-line "

Pengeluaran

1
11
21
31
41
51
61
71
81
91

baik. Sekarang lebih seperti itu! Anda melihat bagaimana sed dapat digunakan dalam skrip bash untuk mencetak garis apa pun dalam fail.

Contohnya tanpa arahan yang setara

Dalam persekitaran baris perintah, kadang-kadang jalan menuju penyelesaian yang menghasilkan rintangan paling sedikit adalah cara sed; jika tidak, anda akhirnya melakukan lebih banyak pekerjaan daripada yang diperlukan di tempat pertama. Beberapa arahan boleh dipaparkan di bawah.

Perintah semua baris dalam skrip shell

sed-e 's / ^ / # /' -
Padamkan baris pertama
sed -e '1d' -
Padamkan baris terakhir
sed-e '$ d' -
Masukkan garis sebelum garis yang sepadan dengan corak
sed '/ 0 $ / i ---' -
Masukkan garis selepas garis yang sepadan dengan corak
sed '/ 0 $ / ---' -
Keluarkan tag html
sed-e /<[^>] *.// g ' -
Tingkatkan ereg dalam kod php lama untuk dijalankan dalam php7 atau lebih baru
sed 's / ereg (\ ([^,] * \).\ ([^)] * \)./ strpos (\ 2, \ 1) / g '
Periksa sama ada sed lebih awal daripada versi tertentu
sed -e 'v 4.5 ' -

Contoh percabangan versi sed dalam bash

Di atas dalam contohnya, ada garis untuk Memeriksa apakah sed lebih awal dari versi tertentu yang dapat kita gunakan untuk menerapkan versi percabangan dalam bash, yang saya percaya lebih mudah daripada mencoba menerapkan fungsi untuk membandingkan angka versi dari output sed -versi. Satu-satunya masalah ialah jika ada versi sed yang lebih awal yang tidak menyokong perintah v, maka kita berada dalam masalah.

Perintah

test-sed-version-at-most ()
gema -n | sed "v $ 1" - 2> / dev / null

versi percubaan ()

echo -n "Versi $ 1. baik. Lakukannya ";
test-sed-version-at-most $ 1 &&
echo -n "lama";
benar
||
gema -n "baru"
;
gema "cara."

utama ()

tempatan v;
untuk v dalam 4.4,5;
buat
cuba-versi $ v;
selesai

utama

Pengeluaran

Versi 4.4. baik. Lakukan dengan cara lama.
Versi 4.5. baik. Lakukan dengan cara baru.

Perhatikan bahawa versi sed yang berjalan di mesin saya untuk menaip watak-watak ini adalah 4.4, yang akan menjelaskan output di atas. Juga, pada masa yang sama, versi terbaru gnu sed adalah 4.7, lebih kurang 3 tahun lebih tua dari yang saya ada. Sedang saya sudah tua! Sebenarnya, dalam sed 4.0.6, parameter ditambahkan ke perintah versi sehingga strategi ini berfungsi untuk apa pun yang dikatakan sekurang-kurangnya v4.0.6, yang ringan kerana versi itu dikeluarkan pada awal tahun 2003. Anda baik.

Saya melakukan penggalian tambahan, sebenarnya BERITA membaca kod sumber terkini. Versi 4.6 mempunyai ciri baru, -debug yang membuang skrip dan memberi garisan output. Ini membolehkan anda menerjemahkan skrip sed yang dihasilkan oleh fungsi dalam bentuk bash ke kanonikal. Sejuk! Jangan lupa bahawa anda memerlukan versi percabangan di bash. Di sinilah contoh sed ini dimainkan.

Contoh fungsi bash menggunakan sed untuk melucutkan tag HTML

Dalam contoh di atas terdapat garis untuk menghilangkan tag HTML. Mari kita masukkan ke dalam fungsi bash dan gunakan untuk menghilangkan semua tag HTML dari artikel terakhir yang saya tulis.

Perintah

tanda jalur ()

sed-e /<[^>] *.// g ' -

curl https: // linuxhint.com / bash_cut_command / - senyap | tegangan

Saya tidak boleh mengatakan bahawa ia sempurna tetapi sekurang-kurangnya ia boleh dibaca di terminal.

Contoh Sed dengan aliran kerja: Contoh alur kerja: ganti semua selamat menggunakan find, grep, dan sed

Adalah selamat untuk mengatakan bahawa perubahan yang dibuat menggunakan sed dengan pilihan -i tidak dapat dipulihkan. Ini adalah kecuali anda benar-benar yakin teks apa yang akan diganti, anda mungkin akan mempunyai satu watak yang kurang daripada yang dimaksudkan. Itulah sebabnya dalam contoh ini, kami akan menggunakan sed dalam aliran kerja untuk mengganti teks dengan selamat dalam semua fail yang telah anda pilih.

Aliran Kerja

  1. cari
  2. grep
  3. sed
cari

Di sini anda akan memilih fail yang akan diganti. Saya cadangkan menggunakan arahan seperti berikut:

cari -jenis f -nama | grep -v -e | xargs -i ..

Sebagai contoh, anda mungkin mahu menghadkan fail untuk menggantikan fail PHP tidak termasuk direktori git repositori seperti berikut.

cari -jenis f -nama \ *.php | grep -v -e '.git '| xargs -i ..

Baca lebih lanjut mengenai perintah xargs dalam bash.

grep

Seterusnya, kita akan mencuba dan memadankan beberapa_pattern dalam fail yang dipilih seperti berikut. Perhatikan bahawa kerana kita menggunakan pilihan -o untuk grep, output hanya akan menunjukkan rentetan yang sesuai jika ada.

cari -jenis f -nama \ *.php | grep -v -e '.git '|
xargs -i grep -e some_pattern -o

Perintah di atas harus mengembalikan senarai rentetan yang sepadan dengan some_pattern.

sed

Akhirnya, kami mahu mengganti semua rentetan yang sepadan dengan beberapa_pattern. Untuk melakukan itu, kita perlu menukar grep menjadi sed seperti berikut.

cari -jenis f -nama \ *.php | grep -v -e '.git '|
xargs -i sed -i -e s / some_pattern / penggantian / g

Perintah grep menjadi sed -i dan pilihan -o dikeluarkan. Dan di sana anda memilikinya.

Sekarang anda boleh memeriksa rentetan apa yang akan diganti sebelumnya dan bukannya menguji nasib anda.

Catatan pada pilihan yang digunakan dalam contoh

Berikut adalah senarai pilihan yang digunakan dalam contoh sed yang dibincangkan secara ringkas.

Pilihan Penerangan
-i Edit di tempat. Sekiranya input adalah fail (tidak dimasukkan) hasil ekspresi akan menimpa kandungan fail.

Sed menerima satu

cth) sed -n ..

-e -e bermaksud ungkapan. Parameternya adalah ungkapan dalam bahasa sed.

Sed menerima banyak

cth: sed -e 'expr1' -e 'expr2'…

-n Hides line tidak terpengaruh oleh ungkapan. Iaitu jika ungkapan itu adalah pernyataan cetak dalam bahasa sed, maka baris yang tidak termasuk dalam pernyataan cetak tidak akan disertakan dalam output.

cth) sed -n ..

Untuk lebih banyak mengenai pilihan sed yang ada, lihat sed -help

Catatan akhir pada arahan yang setara digunakan dalam contoh

Utiliti baris perintah berikut dimasukkan dalam contoh sed dengan perintah yang setara.

Catatan pada trailing - contohnya perintah yang setara

Sekiranya anda tertanya-tanya apa yang berlaku - watak dalam contoh, nota ini adalah untuk anda. Saya menambahkan watak - watak setelah kebanyakan perintah dalam contoh menunjukkan bahawa kami mengharapkan input diterima melalui paip. Itu dia,

kucing beberapa fail | urutkan -R - | kepala -1

Namun, apabila arahan di sebelah kiri paip ada, kita dapat menghilangkan petunjuk seperti berikut.

kucing beberapa fail | urutkan -R | kepala -1

Itulah yang berlaku dengan perintah - watak selepas perintah dalam contoh.

Catatan pada fungsi untuk persediaan

Sekiranya anda mencari, berikut adalah fungsi penyediaan untuk contoh di atas. Output yang diperoleh menggunakan menyatakan -f. Baca lebih lanjut mengenai perintah menyatakan dalam bash untuk lebih banyak penggunaan.

Perintah

perkataan ()

seq 100

bar ()

gema ---

lama-php ()

echo 'ereg ($ UA, "Bottybot")'

Pokoknya

Saya seronok menulis contoh Bash sed dan juga mengambil beberapa muslihat tambahan sepanjang perjalanan. Sed adalah utiliti baris perintah dan bahasa ekspresif yang kuat untuk memanipulasi fail teks. Sekiranya anda suka belajar tentang sed, jangan bimbang masih banyak lagi yang perlu disentuh. Sedap.

Pasang Dolphin Emulator terkini untuk Gamecube & Wii di Linux
Dolphin Emulator membolehkan anda memainkan permainan Gamecube & Wii pilihan anda di Komputer Peribadi Linux (PC). Menjadi emulator permainan sumber ...
Cara Menggunakan Mesin Cheat GameConqueror di Linux
Artikel ini merangkumi panduan mengenai penggunaan mesin cheat GameConqueror di Linux. Ramai pengguna yang bermain permainan di Windows sering menggun...
Emulator Konsol Permainan Terbaik untuk Linux
Artikel ini akan menyenaraikan perisian emulasi konsol permainan popular yang tersedia untuk Linux. Emulation adalah lapisan keserasian perisian yang ...