Saya telah melihat banyak sed
akhir - akhir ini, dan saya merasa itu menjadi perintah yang agak membingungkan. Halaman manual tidak terlalu membantu, tapi saya tahu itu bisa digunakan untuk mem-parsing output dari perintah lain.
Apa sebenarnya sed
dan apa gunanya? Saya mencari jawaban komprehensif yang mencakup apa sed
, apa yang biasa digunakan, dan beberapa contoh dasar / sintaksis.
command-line
sed
Seth
sumber
sumber
Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors.
info sed
memiliki lebih banyak daripadaman sed
. Lalu, di, di/usr/share/doc/sed
sanasedfaq.txt.gz
.Jawaban:
Dalam penggunaan dasar, kata ini digunakan untuk 'mencari dan mengganti' dengan string.
echo "The quick brown fox jumps over the lazy dog" | sed 's/dog/cat/'
kembali
"The quick brown fox jumps over the lazy cat"
Sed benar-benar bersinar ketika ekspresi reguler digunakan dengannya.
Anda mungkin ingin melihat pada artikel ini sekitar
sed
, yang cukup komprehensif.sumber
Definisi
Unix System V: panduan praktis , buku oleh Mark Sobell:
Halaman manual untuk sed (GNU sed) 4.2.2:
Definisi informal saya:
Sed
(singkatan editor aliran ) adalah utilitas pemrosesan teks yang telah dikembangkan pada saat teks diproses satu baris pada satu waktu, tetapi tetap menjadi salah satu utilitas Unix / Linux yang paling kuat; pada saat yang sama, itu adalah bentuk bahasa scripting, yang dirancang khusus untuk memproses teks.Penggunaan
Seperti yang disarankan oleh definisi,
sed
digunakan untuk memproses baris teks, file teks, dan aliran teks yang disalurkan. Paling sering digunakan untuk mengganti serta menghapus teks:Namun, ini juga dapat digunakan untuk meniru perilaku perintah lain. Misalnya,
dmesg | head -n 3
(mencetak 3 baris pertama), bisa kita lakukandmesg | sed -n 1,3p
.dmesg | grep 'wlan0'
(mencari string), bisa kita lakukandmesg | sed -n '/wlan0/p'
Keuntungan besar yang
sed
ada di atas utilitas pemrosesan teks lainnya adalah-i
flag, artinya kita tidak bisa hanya menampilkan teks yang diedit ke layar, tetapi sebenarnya menyimpan hasil edit ke file asli.awk
rasa, sebaliknya, hanya memiliki fitur seperti itu dalamGNU awk
versi.sed
dapat mengambil input pada baris perintah, dengan beberapa pola dipisahkan oleh tanda titik koma (;
) atau dari file skrip yang ditentukan setelah-f
flag, misalnyacat someTextfile.txt | sed -f myScript.sed
Aplikasi dan contoh sed
Sed satu-liner
Manipulasi Teks dengan sed, Linux Journal
sed - 20 contoh untuk menghapus / menghapus karakter dari suatu file
Sed Script - Membalik nama
Bagaimana saya bisa mengganti string dalam file?
Bagaimana saya bisa menghapus setiap baris file?
sumber
sed
adalah perintah yang ampuh yang memungkinkan Anda membuat sesuatu (menghapus garis, mengganti string, memfilter string, dll).Saya bisa memberi Anda daftar penggunaan dengan args tetapi internet diisi itu. Pencarian
sed usage by examples
membawa saya banyak hasil, yang lucu: http://www.thegeekstuff.com/2009/10/unix-sed-tutorial-advanced-sed-substitusi-examples/sumber
Jawaban ini adalah pekerjaan yang sedang berjalan - ia kehilangan lebih banyak contoh tentang perintah susbstitute
Apa
sed
?sed
= Streaming EditorDeskripsi di halaman manual untuk
sed
laporan GNU 4.2.2:Decription di GNU
sed
halaman di gnu.org laporan:Untuk apa
sed
?Ini dapat digunakan untuk melakukan modifikasi kompleks pada aliran data (biasanya teks, tetapi dapat juga digunakan untuk memodifikasi data biner).
Di antara kasus-kasus penggunaan yang paling umum ada:
Ini adalah kasus penggunaan yang tercakup dalam jawaban ini.
Pemakaian
sed
membaca input dari file yang disimpan dalam sistem file jika nama file ditentukan dalam argumen baris perintah selama pemanggilannya, atau daristdin
jika tidak ada nama file yang ditentukan.Doa minimal menggunakan file yang disimpan dalam sistem file:
Doa minimal menggunakan
stdin
:Halo Dunia!
sed
secara default membaca file input baris demi baris; ia membaca satu baris, menghilangkan baris baru yang tertinggal dari garis dan menempatkan baris yang diproses ke dalam "ruang pola"; akhirnya, ia mengeksekusi perintah yang terdaftar pada konten saat ini dari ruang pola dan membaca baris baru dari file input.Ketika tidak ada perintah yang ditentukan atau ketika perintah
p
ataud
ditentukan *,sed
akan selalu mencetak konten saat ini dari ruang pola diikuti oleh baris baru di setiap iterasi terlepas dari:Untuk mencegah satu ini mungkin memanggil
sed
bersama dengan-n
switch:* Berbicara hanya untuk
p
,d
dans
perintah, yang merupakan perintah yang tercakup dalam jawaban ini.Pemilihan garis
sed
dapat memproses seluruh file input atau hanya memproses baris yang dipilih dari file input; pemilihan baris file input yang akan diproses dilakukan dengan menentukan "alamat"; alamat dapat berupa (antara lain) nomor baris atau pola; rentang garis dapat dipilih dengan menentukan rentang alamat.Kemungkinan kombinasi alamat adalah:
<N>
(Di mana<N>
ada nomor): perintah / perintah berikut akan dieksekusi hanya pada nomor baris<N>
;<N>,<M>
(di mana<N>
dan<M>
dua angka,<N>
><M>
): perintah / perintah berikut akan dieksekusi pada garis mulai dari nomor<N>
baris ke nomor baris<M>
inklusif;/<pattern>/
(di mana<pattern>
ekspresi reguler dasar atau diperluas): perintah / perintah berikut akan dieksekusi hanya pada baris yang berisi kejadian<pattern>
;/<pattern1>/,/<pattern2>/
(di mana<pattern1>
dan<pattern2>
merupakan ekspresi reguler dasar atau diperluas): perintah / perintah berikut ini akan dieksekusi pada baris mulai dari baris pertama yang berisi kemunculan<pattern1>
hingga baris berikutnya yang mengandung kemunculan<pattern2>
, berkali-kali dalam kasus beberapa keteraturan<pattern1>
-<pattern2>
kejadian;<N>,/pattern/
(di mana<N>
angka dan<pattern>
ekspresi reguler dasar atau diperluas): perintah / perintah berikut akan dieksekusi pada baris mulai dari nomor baris<N>
ke baris pertama yang berisi kemunculan<pattern>
;/pattern/,<N>
(di mana<pattern>
ekspresi reguler dasar atau diperluas dan<N>
angka): perintah / perintah berikut akan dieksekusi pada baris mulai dari baris pertama yang berisi kemunculan<pattern>
ke nomor baris<N>
;Seleksi yang dilakukan untuk mencetak, menghapus, atau melakukan pergantian pada rentang garis akan selalu menyertakan garis yang cocok dengan alamat yang ditentukan; lebih jauh lagi, pemilihan dilakukan untuk mencetak, menghapus atau melakukan penggantian pada rentang garis menggunakan pola yang malas dan global (yaitu, setiap rentang yang terkena dampak akan selalu menjadi yang terkecil mungkin, dan beberapa rentang akan terpengaruh).
Ketika mencetak rentang garis atau pencetakan hanya garis yang substitusi telah dilakukan, itu perlu untuk memohon
sed
bersama dengan-n
saklar untuk mencegah garis-garis yang cocok criterium yang akan dicetak dua kali (ini terjadi hanya saat mencetak rentang garis) dan dalam rangka untuk mencegah garis yang tidak cocok dengan kriteria yang akan dicetak.Pilihan baris yang akan diproses harus diikuti oleh perintah atau dengan beberapa perintah yang dipisahkan dengan tanda koma yang dikelompokkan menggunakan kurung kurawal.
Perintah: cetak, hapus
Perintah yang digunakan untuk mencetak atau menghapus pilihan adalah, masing-masing:
p
: mencetak garis yang cocok dengan alamat / rentang alamat yang ditentukan;d
: menghapus baris yang cocok dengan alamat / rentang alamat yang ditentukan;Ketika salah satu dari perintah ini tidak didahului oleh alamat / pilihan, perintah dijalankan secara global, yaitu pada setiap baris file input.
Contoh: cetak, hapus
Mencetak / menghapus garis yang menentukan alamat numerik:
File sampel:
<N>
:<N>
:<N>
ke<M>
inklusif:<N>
ke<M>
inklusif:Mencetak / menghapus garis yang menentukan pola:
File sampel:
<pattern>
:<pattern>
:<pattern1>
ke garis yang cocok<pattern2>
termasuk:<pattern1>
ke garis yang cocok<pattern2>
termasuk:Perintah: pengganti
Perintah yang digunakan untuk melakukan substitusi pada suatu seleksi adalah:
s
: baris pengganti yang cocok dengan alamat / rentang alamat yang ditentukan;Ketika perintah ini tidak diawali oleh suatu alamat / pemilihan, perintah dieksekusi secara global, yaitu pada setiap baris dari file input.
Sintaks
s
perintahnya adalah:Garis miring adalah "pembatas"; mereka digunakan untuk membatasi
<pattern>
,<replacement_string>
dan<pattern_flags>
bagian;Pembatas selalu karakter segera mengikuti
s
perintah; itu dapat diatur ke karakter lain, misalnya|
,:<pattern>
adalah ekspresi reguler dasar atau diperluas;<replacement_string>
adalah string tetap yang dapat menyertakansed
urutan -spesifik dengan makna khusus;<pattern_flags>
adalah daftar flag yang memodifikasi perilaku<pattern>
.Paling umum
sed
urutan-spesifik dengan makna khusus:&
: backreference diganti dengan string yang cocok dengan<pattern>
;\<N>
(Di mana<N>
nomornya): referensi kembali diganti dengan<N>
grup yang ditangkap<pattern>
;Bendera yang paling umum:
g
: kekuatan<pattern>
untuk mencocokkan secara global, yaitu beberapa kali di setiap baris;i
: kekuatan<pattern>
untuk mencocokkan case-insensitive;p
: mencetak baris tempat penggantian dilakukan sekali lagi (berguna saat menggunakan doa-n
sakelarsed
untuk hanya mencetak baris tempat penggantian dilakukan);Contoh: pengganti
File sampel:
<pattern>
dengan<replacement_string>
pada setiap baris:<pattern>
dengan<replacement_string>
pada setiap baris:<pattern1>
dan mengganti semua kejadian<pattern2>
dengan<replacement_string>
:<pattern1>
dan mengganti semua kejadian<pattern2>
dengan<replacement_string>
:sumber