Skrip mana yang dapat Anda gunakan dalam ekspresi reguler di php untuk menghapus kata terakhir dari sebuah string?

Izin diberikan untuk menyalin, mendistribusikan dan/atau memodifikasi dokumen ini di bawah ketentuan Lisensi Dokumentasi Bebas GNU, Versi 1. 3 atau versi selanjutnya yang diterbitkan oleh Free Software Foundation; . Salinan lisensi disertakan dalam bagian yang berjudul “Lisensi Dokumentasi Bebas GNU”

Show

1. Perkenalan

sed -i 's/hello/world/' file.txt
22 adalah editor aliran. Editor aliran digunakan untuk melakukan transformasi teks dasar pada aliran input (file atau input dari saluran pipa). Meskipun dalam beberapa hal mirip dengan editor yang mengizinkan pengeditan dengan skrip (seperti
sed -i 's/hello/world/' file.txt
24),
sed -i 's/hello/world/' file.txt
22 bekerja dengan hanya membuat satu kali masukan, dan karenanya lebih efisien. Tetapi kemampuan
sed -i 's/hello/world/' file.txt
_22 untuk memfilter teks dalam saluran yang secara khusus membedakannya dari jenis editor lainnya


2 Menjalankan sed

Bab ini membahas cara menjalankan

sed -i 's/hello/world/' file.txt
_22. Rincian
sed -i 's/hello/world/' file.txt
_22 skrip dan
sed -i 's/hello/world/' file.txt
22 perintah individu dibahas di bab berikutnya


2. 1 Ikhtisar

Biasanya

sed -i 's/hello/world/' file.txt
_22 dipanggil seperti ini

Misalnya, untuk mengganti semua kemunculan 'halo' menjadi 'dunia' di input file. txt

sed 's/hello/world/' input.txt > output.txt
_

Jika Anda tidak menentukan INPUTFILE, atau jika INPUTFILE adalah -,

sed -i 's/hello/world/' file.txt
22 memfilter konten input standar. Perintah berikut ini setara

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt

sed -i 's/hello/world/' file.txt
22 menulis keluaran ke keluaran standar. Gunakan -i untuk mengedit file di tempat alih-alih mencetak ke keluaran standar. Lihat juga
sed -i 's/hello/world/' file.txt
33 dan
sed -i 's/hello/world/' file.txt
34 perintah untuk menulis output ke file lain. Perintah berikut memodifikasi file. txt dan tidak menghasilkan output apapun

sed -i 's/hello/world/' file.txt

Secara default

sed -i 's/hello/world/' file.txt
_22 mencetak semua input yang diproses (kecuali input yang telah dimodifikasi/dihapus oleh perintah seperti
sed -i 's/hello/world/' file.txt
36). Gunakan -n untuk menekan keluaran, dan perintah
sed -i 's/hello/world/' file.txt
37 untuk mencetak baris tertentu. Perintah berikut hanya mencetak baris 45 dari file input

sed -i 's/hello/world/' file.txt
22 memperlakukan banyak file input sebagai satu aliran panjang. Contoh berikut mencetak baris pertama dari file pertama (one. txt) dan baris terakhir dari file terakhir (tiga. txt). Gunakan -s untuk membalikkan perilaku ini

sed -n  '1p ; $p' one.txt two.txt three.txt

Tanpa opsi -e atau -f,

sed -i 's/hello/world/' file.txt
_22 menggunakan parameter non-opsi pertama sebagai skrip, dan parameter non-opsi berikut sebagai file input. Jika opsi -e atau -f digunakan untuk menentukan skrip, semua parameter non-opsi diambil sebagai file masukan. Opsi -e dan -f dapat digabungkan, dan dapat muncul berkali-kali (dalam hal ini skrip akhir yang efektif akan menjadi gabungan dari semua skrip individual)

Contoh berikut setara

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt


2. 2 Opsi Baris Perintah

Format lengkap untuk memanggil

sed -i 's/hello/world/' file.txt
_22 adalah

sed OPTIONS.. [SCRIPT] [INPUTFILE...]

sed -i 's/hello/world/' file.txt
22 dapat dipanggil dengan opsi baris perintah berikut

sed -i 's/hello/world/' file.txt
_42

Cetak versi

sed -i 's/hello/world/' file.txt
_22 yang sedang dijalankan dan pemberitahuan hak cipta, lalu keluar

sed -i 's/hello/world/' file.txt
_44

Cetak pesan penggunaan yang merangkum secara singkat opsi baris perintah ini dan alamat pelaporan bug, lalu keluar

sed -i 's/hello/world/' file.txt
45
sed -i 's/hello/world/' file.txt
46
sed -i 's/hello/world/' file.txt
47

Secara default,

sed -i 's/hello/world/' file.txt
_22 mencetak ruang pola pada akhir setiap siklus melalui skrip (lihat ). Opsi ini menonaktifkan pencetakan otomatis ini, dan
sed -i 's/hello/world/' file.txt
22 hanya menghasilkan output ketika secara eksplisit disuruh melalui perintah
sed -i 's/hello/world/' file.txt
37

sed -i 's/hello/world/' file.txt
_52

Cetak program input sed dalam bentuk kanonis, dan anotasi eksekusi program

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3

sed -i 's/hello/world/' file.txt
53
sed -i 's/hello/world/' file.txt
54

Tambahkan perintah dalam skrip ke kumpulan perintah untuk dijalankan saat memproses input

sed -i 's/hello/world/' file.txt
55
sed -i 's/hello/world/' file.txt
56

Tambahkan perintah yang terdapat dalam file skrip-file ke kumpulan perintah yang akan dijalankan saat memproses input

sed -i 's/hello/world/' file.txt
57
sed -i 's/hello/world/' file.txt
58

Opsi ini menentukan bahwa file akan diedit di tempat. GNU

sed -i 's/hello/world/' file.txt
_22 melakukan ini dengan membuat file sementara dan mengirimkan output ke file ini daripada ke output standar

Opsi ini menyiratkan -s

Saat akhir file tercapai, file sementara diganti namanya menjadi nama asli file keluaran. Ekstensi, jika disediakan, digunakan untuk mengubah nama file lama sebelum mengganti nama file sementara, sehingga membuat salinan cadangan)

Aturan ini diikuti. jika ekstensi tidak berisi

sed -i 's/hello/world/' file.txt
60, ekstensi ditambahkan ke akhir nama file saat ini sebagai sufiks; . Ini memungkinkan Anda untuk menambahkan awalan ke file cadangan, alih-alih (atau sebagai tambahan) akhiran, atau bahkan menempatkan salinan cadangan dari file asli ke direktori lain (asalkan direktori tersebut sudah ada)

Jika tidak ada ekstensi yang disediakan, file asli akan ditimpa tanpa membuat cadangan

Karena -i mengambil argumen opsional, seharusnya tidak diikuti oleh opsi singkat lainnya

sed -i 's/hello/world/' file.txt
_62

Sama seperti -E -i tanpa akhiran cadangan - FILE akan diedit di tempat tanpa membuat cadangan

sed -i 's/hello/world/' file.txt
_63

Ini sama dengan --in-place=E, membuat FILE sebagai cadangan FILE

Hati-hati menggunakan -n dengan -i. yang pertama menonaktifkan pencetakan garis otomatis dan yang terakhir mengubah file di tempat tanpa cadangan. Digunakan sembarangan (dan tanpa perintah

sed -i 's/hello/world/' file.txt
37 yang eksplisit), file keluaran akan kosong

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE

sed -i 's/hello/world/' file.txt
65
sed -i 's/hello/world/' file.txt
66

Tentukan panjang pembungkus baris default untuk perintah

sed -i 's/hello/world/' file.txt
67. Panjang 0 (nol) berarti tidak pernah membungkus garis panjang. Jika tidak ditentukan, diambil menjadi 70

sed -i 's/hello/world/' file.txt
_68

GNU

sed -i 's/hello/world/' file.txt
_22 menyertakan beberapa ekstensi ke POSIX sed. Untuk menyederhanakan penulisan skrip portabel, opsi ini menonaktifkan semua ekstensi yang didokumentasikan manual ini, termasuk perintah tambahan. Sebagian besar ekstensi menerima
sed -i 's/hello/world/' file.txt
22 program yang berada di luar sintaks yang diamanatkan oleh POSIX, tetapi beberapa di antaranya (seperti perilaku perintah
sed -i 's/hello/world/' file.txt
71 yang dijelaskan dalam ) sebenarnya melanggar standar. Jika Anda hanya ingin menonaktifkan jenis ekstensi yang terakhir, Anda dapat menyetel variabel
sed -i 's/hello/world/' file.txt
72 ke nilai yang tidak kosong

sed -i 's/hello/world/' file.txt
73
sed -i 's/hello/world/' file.txt
74

Opsi ini tersedia di setiap platform, tetapi hanya efektif jika sistem operasi membedakan antara file teks dan file biner. Ketika perbedaan dibuat—seperti halnya MS-DOS, Windows, Cygwin—file teks terdiri dari baris yang dipisahkan oleh carriage return dan karakter line feed, dan

sed -i 's/hello/world/' file.txt
22 tidak melihat akhir CR. Ketika opsi ini ditentukan,
sed -i 's/hello/world/' file.txt
_22 akan membuka file input dalam mode biner, sehingga tidak meminta pemrosesan khusus ini dan mempertimbangkan baris untuk diakhiri pada umpan baris

sed -i 's/hello/world/' file.txt
_77

Opsi ini hanya tersedia pada platform yang mendukung tautan simbolik dan hanya berpengaruh jika opsi -i ditentukan. Dalam hal ini, jika file yang ditentukan pada baris perintah adalah tautan simbolis,

sed -i 's/hello/world/' file.txt
22 akan mengikuti tautan dan mengedit tujuan akhir tautan. Perilaku default adalah memutus tautan simbolik, sehingga tujuan tautan tidak akan diubah

sed -i 's/hello/world/' file.txt
79
sed -i 's/hello/world/' file.txt
80
sed -i 's/hello/world/' file.txt
81

Gunakan ekspresi reguler yang diperluas daripada ekspresi reguler dasar. Regexp yang diperluas adalah yang

sed -i 's/hello/world/' file.txt
82 menerima; . Secara historis ini adalah ekstensi GNU, tetapi ekstensi -E telah ditambahkan ke standar POSIX (http. //austingroupbugs. bersih/tampilan. php?id=528), jadi gunakan -E untuk portabilitas. GNU sed telah menerima -E sebagai opsi tidak berdokumen selama bertahun-tahun, dan *BSD seds telah menerima -E selama bertahun-tahun juga, tetapi skrip yang menggunakan -E mungkin tidak dapat di-port ke sistem lama lainnya. Lihat

sed -i 's/hello/world/' file.txt
83
sed -i 's/hello/world/' file.txt
84

Secara default,

sed -i 's/hello/world/' file.txt
_22 akan menganggap file yang ditentukan pada baris perintah sebagai satu aliran panjang berkelanjutan. Ekstensi
sed -i 's/hello/world/' file.txt
_22 GNU ini memungkinkan pengguna untuk menganggapnya sebagai file terpisah. rentang alamat (seperti '/abc/,/def/') tidak diperbolehkan menjangkau beberapa file, nomor baris relatif terhadap awal setiap file,
sed -i 's/hello/world/' file.txt
87 merujuk ke baris terakhir setiap file, dan file dipanggil dari
sed -i 's/hello/world/' file.txt
88

sed -i 's/hello/world/' file.txt
_89

Dalam mode kotak pasir,

sed -i 's/hello/world/' file.txt
90 perintah ditolak - program yang berisi perintah tersebut akan dibatalkan tanpa dijalankan. Mode kotak pasir memastikan
sed -i 's/hello/world/' file.txt
22 hanya beroperasi pada file input yang ditentukan pada baris perintah, dan tidak dapat menjalankan program eksternal

sed -i 's/hello/world/' file.txt
_92
sed -i 's/hello/world/' file.txt
93

Buffer input dan output seminimal mungkin. (Ini sangat berguna jika input berasal dari 'tail -f', dan Anda ingin melihat output yang diubah sesegera mungkin. )

sed -i 's/hello/world/' file.txt
_94
sed -i 's/hello/world/' file.txt
95
sed -i 's/hello/world/' file.txt
96

Perlakukan input sebagai satu set baris, masing-masing diakhiri dengan nol byte (karakter ASCII 'NUL') alih-alih baris baru. Opsi ini dapat digunakan dengan perintah seperti 'sort -z' dan 'find -print0' untuk memproses nama file arbitrer

Jika tidak ada opsi -e, -f, --expression, atau --file yang diberikan pada baris perintah, maka argumen non-opsi pertama pada baris perintah akan dianggap sebagai skrip yang akan dieksekusi

Jika ada parameter baris perintah yang tersisa setelah pemrosesan di atas, parameter ini ditafsirkan sebagai nama file input yang akan diproses. Nama file '-' mengacu pada aliran input standar. Input standar akan diproses jika tidak ada nama file yang ditentukan


2. 3 Keluar status

Status keluar nol menunjukkan keberhasilan, dan nilai bukan nol menunjukkan kegagalan. GNU

sed -i 's/hello/world/' file.txt
_22 mengembalikan nilai kesalahan status keluar berikut

0

Penyelesaian yang berhasil

1

Perintah tidak valid, sintaks tidak valid, ekspresi reguler tidak valid atau perintah ekstensi ________0______22 GNU digunakan dengan --posix

2

Satu atau lebih file input yang ditentukan pada baris perintah tidak dapat dibuka (mis. g. jika file tidak ditemukan, atau izin baca ditolak). Pemrosesan dilanjutkan dengan file lain

4

Kesalahan I/O, atau kesalahan pemrosesan yang serius selama runtime, GNU

sed -i 's/hello/world/' file.txt
22 segera dibatalkan

Selain itu, perintah

sed -n  '1p ; $p' one.txt two.txt three.txt
00 dan
sed -n  '1p ; $p' one.txt two.txt three.txt
01 dapat digunakan untuk mengakhiri
sed -i 's/hello/world/' file.txt
22 dengan nilai kode keluar khusus (ini adalah ekstensi
sed -i 's/hello/world/' file.txt
22 GNU)

$ echo | sed 'Q42' ; echo $?
42


3 sed -i 's/hello/world/' file.txt _22 skrip


3. 1 sed -i 's/hello/world/' file.txt _22 ikhtisar skrip

Program

sed -i 's/hello/world/' file.txt
_22 terdiri dari satu atau lebih
sed -i 's/hello/world/' file.txt
22 perintah, diteruskan oleh satu atau lebih opsi -e, -f, --expression, dan --file, atau argumen non-opsi pertama jika nol dari opsi ini digunakan. Dokumen ini akan mengacu pada skrip
sed -i 's/hello/world/' file.txt
22 "the"; . Lihat

sed -i 's/hello/world/' file.txt
_22 perintah mengikuti sintaks ini

X adalah perintah

sed -i 's/hello/world/' file.txt
22 huruf tunggal.
sed -n  '1p ; $p' one.txt two.txt three.txt
_11 adalah alamat baris opsional. Jika
sed -n  '1p ; $p' one.txt two.txt three.txt
_11 ditentukan, perintah X akan dijalankan hanya pada baris yang cocok.
sed -n  '1p ; $p' one.txt two.txt three.txt
_11 dapat berupa nomor baris tunggal, ekspresi reguler, atau rentang baris (lihat ). ________19______14 tambahan digunakan untuk beberapa perintah
sed -i 's/hello/world/' file.txt
22

Contoh berikut menghapus baris 30 sampai 35 pada input.

sed -n  '1p ; $p' one.txt two.txt three.txt
_16 adalah rentang alamat.
sed -i 's/hello/world/' file.txt
_36 adalah perintah hapus

sed '30,35d' input.txt > output.txt

Contoh berikut mencetak semua input hingga baris yang dimulai dengan kata 'foo' ditemukan. Jika baris tersebut ditemukan,

sed -i 's/hello/world/' file.txt
_22 akan berakhir dengan status keluar 42. Jika baris tersebut tidak ditemukan (dan tidak ada kesalahan lain yang terjadi),
sed -i 's/hello/world/' file.txt
22 akan keluar dengan status 0.
sed -n  '1p ; $p' one.txt two.txt three.txt
_20 adalah alamat ekspresi reguler.
sed -n  '1p ; $p' one.txt two.txt three.txt
_00 adalah perintah berhenti.
sed -n  '1p ; $p' one.txt two.txt three.txt
_22 adalah opsi perintah

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
_0

Perintah dalam skrip atau file skrip dapat dipisahkan dengan titik koma (

sed -n  '1p ; $p' one.txt two.txt three.txt
23) atau baris baru (ASCII 10). Beberapa skrip dapat ditentukan dengan opsi -e atau -f

Contoh berikut semuanya setara. Mereka melakukan dua

sed -i 's/hello/world/' file.txt
_22 operasi. menghapus semua baris yang cocok dengan ekspresi reguler
sed -n  '1p ; $p' one.txt two.txt three.txt
20, dan mengganti semua kemunculan string 'halo' dengan 'dunia'

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
_1

Perintah

sed -n  '1p ; $p' one.txt two.txt three.txt
26,
sed -n  '1p ; $p' one.txt two.txt three.txt
27,
sed -n  '1p ; $p' one.txt two.txt three.txt
28, karena sintaksnya, tidak dapat diikuti oleh titik koma yang berfungsi sebagai pemisah perintah dan karenanya harus diakhiri dengan baris baru atau ditempatkan di akhir skrip atau file skrip. Perintah juga dapat didahului dengan karakter spasi non-signifikan opsional. Lihat


3. 2 sed -i 's/hello/world/' file.txt _22 ringkasan perintah

Perintah berikut didukung di GNU

sed -i 's/hello/world/' file.txt
22. Beberapa adalah perintah POSIX standar, sementara yang lain adalah ekstensi GNU. Detail dan contoh untuk setiap perintah ada di bagian berikut. (Mnemonik) ditampilkan dalam tanda kurung

sed -n  '1p ; $p' one.txt two.txt three.txt
_31
sed -n  '1p ; $p' one.txt two.txt three.txt
32

Tambahkan teks setelah satu baris

sed -n  '1p ; $p' one.txt two.txt three.txt
_33

Tambahkan teks setelah baris (sintaksis alternatif)

sed -n  '1p ; $p' one.txt two.txt three.txt
_34

Cabang tanpa syarat untuk memberi label. Label dapat dihilangkan, dalam hal ini siklus berikutnya dimulai

sed -n  '1p ; $p' one.txt two.txt three.txt
_35
sed -n  '1p ; $p' one.txt two.txt three.txt
32

Ganti (ganti) baris dengan teks

sed -n  '1p ; $p' one.txt two.txt three.txt
_37

Ganti (ubah) baris dengan teks (sintaks alternatif)

sed -i 's/hello/world/' file.txt
_36

Hapus ruang pola;

sed -n  '1p ; $p' one.txt two.txt three.txt
_39

Jika ruang pola berisi baris baru, hapus teks di ruang pola hingga baris baru pertama, dan mulai ulang siklus dengan ruang pola yang dihasilkan, tanpa membaca baris input baru

Jika ruang pola tidak berisi baris baru, mulailah siklus baru yang normal seolah-olah perintah ________0______36 dikeluarkan

sed -n  '1p ; $p' one.txt two.txt three.txt
_41

Jalankan perintah yang ditemukan di ruang pola dan ganti ruang pola dengan output;

sed -n  '1p ; $p' one.txt two.txt three.txt
_42

Mengeksekusi perintah dan mengirimkan outputnya ke aliran output. Perintah dapat dijalankan melintasi beberapa baris, semuanya kecuali yang terakhir diakhiri dengan garis miring terbalik

sed -n  '1p ; $p' one.txt two.txt three.txt
_43

(nama file) Cetak nama file dari file input saat ini (dengan baris baru yang tertinggal)

sed -n  '1p ; $p' one.txt two.txt three.txt
_44

Ganti isi ruang pola dengan isi ruang tunggu

sed -n  '1p ; $p' one.txt two.txt three.txt
_45

Tambahkan baris baru ke konten ruang pola, lalu tambahkan konten ruang penahan ke konten ruang pola

sed -n  '1p ; $p' one.txt two.txt three.txt
_46

(tahan) Ganti isi ruang tunggu dengan isi ruang pola

sed -n  '1p ; $p' one.txt two.txt three.txt
_47

Tambahkan baris baru ke konten ruang tunggu, lalu tambahkan konten ruang pola ke konten ruang tunggu

sed -n  '1p ; $p' one.txt two.txt three.txt
_48
sed -n  '1p ; $p' one.txt two.txt three.txt
32

menyisipkan teks sebelum baris

sed -n  '1p ; $p' one.txt two.txt three.txt
_50

menyisipkan teks sebelum baris (sintaksis alternatif)

sed -i 's/hello/world/' file.txt
_67

Cetak ruang pola dalam bentuk yang tidak ambigu

sed -n  '1p ; $p' one.txt two.txt three.txt
_52

(berikutnya) Jika cetak otomatis tidak dinonaktifkan, cetak ruang pola, lalu, terlepas dari itu, ganti ruang pola dengan baris input berikutnya. Jika tidak ada input lagi maka

sed -i 's/hello/world/' file.txt
_22 keluar tanpa memproses perintah lagi

sed -i 's/hello/world/' file.txt
_71

Tambahkan baris baru ke ruang pola, lalu tambahkan baris input berikutnya ke ruang pola. Jika tidak ada input lagi maka

sed -i 's/hello/world/' file.txt
_22 keluar tanpa memproses perintah lagi

sed -i 's/hello/world/' file.txt
_37

Cetak ruang pola

sed -n  '1p ; $p' one.txt two.txt three.txt
_57

Cetak ruang pola, hingga yang pertama

sed -n  '1p ; $p' one.txt two.txt three.txt
_58

(keluar) Keluar dari

sed -i 's/hello/world/' file.txt
_22 tanpa memproses perintah atau masukan lagi

sed -n  '1p ; $p' one.txt two.txt three.txt
_60

(keluar) Perintah ini sama dengan

sed -n  '1p ; $p' one.txt two.txt three.txt
00, tetapi tidak akan mencetak isi ruang pola. Seperti
sed -n  '1p ; $p' one.txt two.txt three.txt
_00, ini memberikan kemampuan untuk mengembalikan kode keluar ke penelepon

sed -n  '1p ; $p' one.txt two.txt three.txt
_63

Membaca nama file file

sed -n  '1p ; $p' one.txt two.txt three.txt
_64

Antrean baris nama file untuk dibaca dan dimasukkan ke dalam aliran output pada akhir siklus saat ini, atau saat baris input berikutnya dibaca

sed -n  '1p ; $p' one.txt two.txt three.txt
_65

(pengganti) Cocokkan ekspresi reguler dengan konten ruang pola. Jika ditemukan, ganti string yang cocok dengan pengganti

sed -n  '1p ; $p' one.txt two.txt three.txt
_66

(tes) Cabang untuk memberi label hanya jika telah ada

sed -n  '1p ; $p' one.txt two.txt three.txt
67substitusi yang berhasil sejak baris input terakhir dibaca atau cabang bersyarat diambil. Label dapat dihilangkan, dalam hal ini siklus berikutnya dimulai

sed -n  '1p ; $p' one.txt two.txt three.txt
_68

(tes) Cabang untuk memberi label hanya jika tidak ada

sed -n  '1p ; $p' one.txt two.txt three.txt
67pergantian yang berhasil sejak baris input terakhir dibaca atau cabang bersyarat diambil. Label dapat dihilangkan, dalam hal ini siklus berikutnya dimulai

sed -n  '1p ; $p' one.txt two.txt three.txt
_70

(versi) Perintah ini tidak melakukan apa-apa, tetapi membuat

sed -i 's/hello/world/' file.txt
22 gagal jika ekstensi GNU
sed -i 's/hello/world/' file.txt
22 tidak didukung, atau jika versi yang diminta tidak tersedia

sed -n  '1p ; $p' one.txt two.txt three.txt
_73

Tulis ruang pola ke nama file

sed -n  '1p ; $p' one.txt two.txt three.txt
_74

Tulis ke nama file yang diberikan bagian dari ruang pola hingga baris baru pertama

sed -n  '1p ; $p' one.txt two.txt three.txt
75

Tukarkan isi ruang penangguhan dan pola

sed -n  '1p ; $p' one.txt two.txt three.txt
_76

Transliterasi karakter apa pun dalam ruang pola yang cocok dengan salah satu karakter sumber dengan karakter yang sesuai dalam karakter tujuan

sed -n  '1p ; $p' one.txt two.txt three.txt
_77

(zap) Perintah ini mengosongkan isi ruang pola

sed -n  '1p ; $p' one.txt two.txt three.txt
_78

Sebuah komentar, hingga baris baru berikutnya

sed -n  '1p ; $p' one.txt two.txt three.txt
_79

Kelompokkan beberapa perintah bersama

sed -n  '1p ; $p' one.txt two.txt three.txt
_80

Cetak nomor baris input saat ini (dengan baris baru di belakang)

sed -n  '1p ; $p' one.txt two.txt three.txt
_81

Tentukan lokasi label untuk perintah cabang (

sed -n  '1p ; $p' one.txt two.txt three.txt
82,
sed -n  '1p ; $p' one.txt two.txt three.txt
83,
sed -n  '1p ; $p' one.txt two.txt three.txt
84)


3. 3 Perintah sed -n '1p ; $p' one.txt two.txt three.txt _67

Perintah

sed -n  '1p ; $p' one.txt two.txt three.txt
_67 (sebagai pengganti) mungkin yang paling penting di
sed -i 's/hello/world/' file.txt
22 dan memiliki banyak opsi berbeda. Sintaks perintah
sed -n  '1p ; $p' one.txt two.txt three.txt
_67 adalah 's/regexp/replacement/flags'

Konsep dasarnya sederhana. perintah

sed -n  '1p ; $p' one.txt two.txt three.txt
_67 mencoba mencocokkan ruang pola dengan regexp ekspresi reguler yang disediakan;

Untuk detail tentang sintaks regexp lihat

Pengganti dapat berisi referensi

sed -n  '1p ; $p' one.txt two.txt three.txt
90 (n adalah angka dari 1 sampai 9, inklusif), yang mengacu pada porsi kecocokan yang terdapat antara tanggal
sed -n  '1p ; $p' one.txt two.txt three.txt
91 dan pencocokannya
sed -n  '1p ; $p' one.txt two.txt three.txt
92. Juga, penggantian dapat berisi
sed -n  '1p ; $p' one.txt two.txt three.txt
93 karakter yang tidak lolos yang mereferensikan seluruh bagian yang cocok dari ruang pola

sed -n  '1p ; $p' one.txt two.txt three.txt
_94 karakter dapat diganti secara seragam oleh karakter tunggal lainnya dalam perintah
sed -n  '1p ; $p' one.txt two.txt three.txt
67 yang diberikan. Karakter
sed -n  '1p ; $p' one.txt two.txt three.txt
_94 (atau karakter lain apa pun yang digunakan sebagai gantinya) dapat muncul di regexp atau penggantian hanya jika didahului oleh karakter
sed -n  '1p ; $p' one.txt two.txt three.txt
97

Terakhir, sebagai ekstensi

sed -i 's/hello/world/' file.txt
22 GNU, Anda dapat menyertakan urutan khusus yang terbuat dari garis miring terbalik dan salah satu huruf
sed -n  '1p ; $p' one.txt two.txt three.txt
99,
sed -i 's/hello/world/' file.txt
67,
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
01,
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
02, atau
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
03. Artinya adalah sebagai berikut

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
_04

Turn the replacement to lowercase until a

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
05 or
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
06 is found,

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
07

Mengubah karakter berikutnya menjadi huruf kecil,

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
05

Ubah pengganti menjadi huruf besar sampai

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
04 atau
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
06 ditemukan,

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
11

Ubah karakter berikutnya menjadi huruf besar,

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
_06

Stop case conversion started by

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
04 or
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
05

Saat bendera

sed -n  '1p ; $p' one.txt two.txt three.txt
_44 digunakan, konversi huruf besar/kecil tidak menyebar dari satu kemunculan ekspresi reguler ke kemunculan lainnya. Misalnya, ketika perintah berikut dijalankan dengan 'a-b-' di ruang pola

outputnya adalah 'axxB'. Saat mengganti '-' pertama, urutan '\ u' hanya memengaruhi penggantian kosong '\ 1'. Itu tidak memengaruhi

sed -n  '1p ; $p' one.txt two.txt three.txt
_75 karakter yang ditambahkan ke ruang pola saat mengganti
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
17 dengan
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
18

Di sisi lain,

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
_07 dan
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
11 memengaruhi sisa teks pengganti jika diikuti dengan substitusi kosong. With ‘a-b-’ in pattern space, the following command

akan mengganti '-' dengan 'X' (huruf besar) dan 'b-' dengan 'Bx'. Jika perilaku ini tidak diinginkan, Anda dapat mencegahnya dengan menambahkan urutan '\E'—setelah '\1' dalam kasus ini

Untuk menyertakan

sed -n  '1p ; $p' one.txt two.txt three.txt
97 literal,
sed -n  '1p ; $p' one.txt two.txt three.txt
93, atau baris baru dalam penggantian akhir, pastikan untuk mendahului
sed -n  '1p ; $p' one.txt two.txt three.txt
97,
sed -n  '1p ; $p' one.txt two.txt three.txt
93 yang diinginkan, atau baris baru dalam penggantian dengan
sed -n  '1p ; $p' one.txt two.txt three.txt
97

Perintah

sed -n  '1p ; $p' one.txt two.txt three.txt
_67 dapat diikuti oleh nol atau lebih dari flag berikut

sed -n  '1p ; $p' one.txt two.txt three.txt
_44

Apply the replacement to all matches to the regexp, not just the first

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
28

Hanya ganti kecocokan nomor dari regexp

interaction in

sed -n  '1p ; $p' one.txt two.txt three.txt
67 command Note. standar POSIX tidak menentukan apa yang harus terjadi ketika Anda mencampur
sed -n  '1p ; $p' one.txt two.txt three.txt
44 dan pengubah angka, dan saat ini tidak ada kesepakatan yang luas tentang makna di seluruh implementasi
sed -i 's/hello/world/' file.txt
22. Untuk GNU
sed -i 's/hello/world/' file.txt
_22, interaksi didefinisikan sebagai. abaikan kecocokan sebelum angka, lalu cocokkan dan ganti semua kecocokan dari angka ke atas

sed -i 's/hello/world/' file.txt
_37

Jika substitusi telah dilakukan, maka cetak ruang pola baru

Catatan. ketika opsi

sed -i 's/hello/world/' file.txt
37 dan
sed -n  '1p ; $p' one.txt two.txt three.txt
41 ditentukan, urutan relatif keduanya menghasilkan hasil yang sangat berbeda. Secara umum,
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
_36 (evaluasi lalu cetak) adalah yang Anda inginkan, tetapi mengoperasikan sebaliknya dapat berguna untuk debugging. For this reason, the current version of GNU
sed -i 's/hello/world/' file.txt
22 interprets specially the presence of
sed -i 's/hello/world/' file.txt
37 options both before and after
sed -n  '1p ; $p' one.txt two.txt three.txt
41, printing the pattern space before and after evaluation, while in general flags for the
sed -n  '1p ; $p' one.txt two.txt three.txt
67 command show their effect just once. Perilaku ini, meskipun didokumentasikan, mungkin berubah di versi mendatang

sed -n  '1p ; $p' one.txt two.txt three.txt
_73

If the substitution was made, then write out the result to the named file. Sebagai ekstensi

sed -i 's/hello/world/' file.txt
22 GNU, dua nilai khusus nama file didukung. /dev/stderr, yang menulis hasil ke kesalahan standar, dan /dev/stdout, yang menulis ke keluaran standar

sed -n  '1p ; $p' one.txt two.txt three.txt
_41

This command allows one to pipe input from a shell command into pattern space. If a substitution was made, the command that is found in pattern space is executed and pattern space is replaced with its output. A trailing newline is suppressed; results are undefined if the command to be executed contains a NUL character. This is a GNU

sed -i 's/hello/world/' file.txt
22 extension

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
45
sed -n  '1p ; $p' one.txt two.txt three.txt
28

The

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
45 modifier to regular-expression matching is a GNU extension which makes
sed -i 's/hello/world/' file.txt
22 match regexp in a case-insensitive manner

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
49
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
50

The

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
49 modifier to regular-expression matching is a GNU
sed -i 's/hello/world/' file.txt
22 extension which directs GNU
sed -i 's/hello/world/' file.txt
22 to match the regular expression in multi-line mode. The modifier causes
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
54 and
sed -i 's/hello/world/' file.txt
87 to match respectively (in addition to the normal behavior) the empty string after a newline, and the empty string before a newline. There are special character sequences (
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
56 and
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
57) which always match the beginning or the end of the buffer. In addition, the period character does not match a new-line character in multi-line mode


3. 4 Perintah yang Sering Digunakan

Jika Anda menggunakan

sed -i 's/hello/world/' file.txt
_22 sama sekali, kemungkinan besar Anda ingin mengetahui perintah ini

sed -n  '1p ; $p' one.txt two.txt three.txt
_78

[Tidak ada alamat yang diizinkan. ]

Karakter

sed -n  '1p ; $p' one.txt two.txt three.txt
_78 memulai komentar;

Jika Anda khawatir tentang portabilitas, ketahuilah bahwa beberapa implementasi

sed -i 's/hello/world/' file.txt
22 (yang tidak sesuai dengan POSIX) hanya dapat mendukung satu komentar satu baris, dan hanya jika karakter paling pertama dari skrip adalah
sed -n  '1p ; $p' one.txt two.txt three.txt
78

Peringatan. jika dua karakter pertama dari skrip

sed -i 's/hello/world/' file.txt
_22 adalah
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
64, maka opsi -n (tanpa cetak otomatis) dipaksakan. Jika Anda ingin memberi komentar di baris pertama skrip Anda dan komentar itu dimulai dengan huruf 'n' dan Anda tidak menginginkan perilaku ini, pastikan untuk menggunakan huruf kapital 'N', atau tempatkan setidaknya satu spasi

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
65

Keluar

sed -i 's/hello/world/' file.txt
_22 tanpa memproses perintah atau masukan lagi

Contoh. berhenti setelah mencetak baris kedua

Perintah ini hanya menerima satu alamat. Perhatikan bahwa ruang pola saat ini dicetak jika cetak otomatis tidak dinonaktifkan dengan opsi -n. Kemampuan untuk mengembalikan kode keluar dari skrip

sed -i 's/hello/world/' file.txt
_22 adalah ekstensi GNU
sed -i 's/hello/world/' file.txt
22

Lihat juga GNU

sed -i 's/hello/world/' file.txt
22 ekstensi
sed -n  '1p ; $p' one.txt two.txt three.txt
01 perintah yang berhenti diam-diam tanpa mencetak ruang pola saat ini

sed -i 's/hello/world/' file.txt
_36

Hapus ruang pola;

Contoh. hapus baris input kedua

sed -i 's/hello/world/' file.txt
_37

Cetak ruang pola (ke keluaran standar). Perintah ini biasanya hanya digunakan bersamaan dengan opsi baris perintah -n

Contoh. cetak hanya baris input kedua

sed -n  '1p ; $p' one.txt two.txt three.txt
_52

Jika cetak otomatis tidak dinonaktifkan, cetak ruang pola, lalu ganti ruang pola dengan baris input berikutnya. Jika tidak ada input lagi maka

sed -i 's/hello/world/' file.txt
_22 keluar tanpa memproses perintah lagi

Perintah ini berguna untuk melewati baris (mis. g. memproses setiap baris ke-N)

Contoh. melakukan substitusi pada setiap baris ke-3 (i. e. dua

sed -n  '1p ; $p' one.txt two.txt three.txt
_52 perintah lewati dua baris)

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
_2

GNU

sed -i 's/hello/world/' file.txt
_22 menyediakan sintaks alamat ekstensi first~step untuk mencapai hasil yang sama

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
_3

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
77

Sekelompok perintah dapat diapit antara

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
78 dan
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
79 karakter. Ini sangat berguna ketika Anda ingin sekelompok perintah dipicu oleh satu alamat (atau rentang alamat) yang cocok

Contoh. lakukan substitusi lalu cetak baris input kedua

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
_4


3. 5 Perintah yang Jarang Digunakan

Meskipun mungkin lebih jarang digunakan daripada yang ada di bagian sebelumnya, beberapa skrip

sed -i 's/hello/world/' file.txt
22 yang sangat kecil namun berguna dapat dibuat dengan perintah ini

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
81

Transliterasi karakter apa pun dalam ruang pola yang cocok dengan salah satu karakter sumber dengan karakter yang sesuai dalam karakter tujuan

Contoh. transliterasikan 'a-j' menjadi '0-9'

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
_5

(Karakter

sed -n  '1p ; $p' one.txt two.txt three.txt
_94 dapat diganti secara seragam oleh karakter tunggal lainnya dalam perintah
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
83 yang diberikan. )

Instance dari

sed -n  '1p ; $p' one.txt two.txt three.txt
_94 (atau karakter lain apa pun yang digunakan sebagai gantinya),
sed -n  '1p ; $p' one.txt two.txt three.txt
97, atau baris baru dapat muncul di daftar source-chars atau dest-chars, asalkan setiap instance diloloskan oleh
sed -n  '1p ; $p' one.txt two.txt three.txt
97. Daftar source-chars dan dest-chars harus berisi jumlah karakter yang sama (setelah dihapus)

Lihat perintah

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
_87 dari GNU coreutils untuk fungsi serupa

sed -n  '1p ; $p' one.txt two.txt three.txt
_33

Menambahkan teks setelah baris. Ini adalah ekstensi GNU untuk perintah

sed -n  '1p ; $p' one.txt two.txt three.txt
26 standar - lihat di bawah untuk detailnya

Contoh. Tambahkan kata 'halo' setelah baris kedua

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
_6

Memimpin spasi setelah perintah

sed -n  '1p ; $p' one.txt two.txt three.txt
_26 diabaikan. Teks yang akan ditambahkan dibaca sampai akhir baris

sed -n  '1p ; $p' one.txt two.txt three.txt
_31
sed -n  '1p ; $p' one.txt two.txt three.txt
32

Menambahkan teks setelah baris

Contoh. Tambahkan 'halo' setelah baris kedua (-. menunjukkan garis keluaran yang dicetak)

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
_7

Perintah

sed -n  '1p ; $p' one.txt two.txt three.txt
_26 mengantri baris teks yang mengikuti perintah ini (masing-masing kecuali yang terakhir diakhiri dengan
sed -n  '1p ; $p' one.txt two.txt three.txt
97, yang dihapus dari keluaran) untuk menjadi keluaran pada akhir siklus saat ini, atau saat baris masukan berikutnya dibaca

Sebagai ekstensi GNU, perintah ini menerima dua alamat

Urutan melarikan diri dalam teks diproses, jadi Anda harus menggunakan

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
95 dalam teks untuk mencetak satu garis miring terbalik

Perintah dilanjutkan setelah baris terakhir tanpa garis miring terbalik (

sed -n  '1p ; $p' one.txt two.txt three.txt
97) - 'dunia' dalam contoh berikut

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
_8

Sebagai ekstensi GNU, perintah dan teks

sed -n  '1p ; $p' one.txt two.txt three.txt
_26 dapat dipisahkan menjadi dua parameter
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
98, memungkinkan pembuatan skrip yang lebih mudah

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
_9

sed -n  '1p ; $p' one.txt two.txt three.txt
_50

menyisipkan teks sebelum baris. Ini adalah ekstensi GNU untuk perintah

sed -n  '1p ; $p' one.txt two.txt three.txt
28 standar - lihat di bawah untuk detailnya

Contoh. Masukkan kata 'halo' sebelum baris kedua

sed -i 's/hello/world/' file.txt
0

Memimpin spasi putih setelah perintah

sed -n  '1p ; $p' one.txt two.txt three.txt
_28 diabaikan. The text to add is read until the end of the line

sed -n  '1p ; $p' one.txt two.txt three.txt
_48
sed -n  '1p ; $p' one.txt two.txt three.txt
32

Segera tampilkan baris teks yang mengikuti perintah ini

Contoh. Masukkan 'halo' sebelum baris kedua (-. menunjukkan garis keluaran yang dicetak)

sed -i 's/hello/world/' file.txt
_1

Sebagai ekstensi GNU, perintah ini menerima dua alamat

Urutan melarikan diri dalam teks diproses, jadi Anda harus menggunakan

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
95 dalam teks untuk mencetak satu garis miring terbalik

Perintah dilanjutkan setelah baris terakhir tanpa garis miring terbalik (

sed -n  '1p ; $p' one.txt two.txt three.txt
97) - 'dunia' dalam contoh berikut

sed -i 's/hello/world/' file.txt
_2

Sebagai ekstensi GNU, perintah dan teks

sed -n  '1p ; $p' one.txt two.txt three.txt
_28 dapat dipisahkan menjadi dua parameter
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
98, memungkinkan pembuatan skrip yang lebih mudah

sed -i 's/hello/world/' file.txt
_3

sed -n  '1p ; $p' one.txt two.txt three.txt
_37

Mengganti baris dengan teks. Ini adalah ekstensi GNU untuk perintah

sed -n  '1p ; $p' one.txt two.txt three.txt
27 standar - lihat di bawah untuk detailnya

Contoh. Ganti baris ke-2 hingga ke-9 dengan kata 'halo'

sed -i 's/hello/world/' file.txt
_4

Memimpin spasi putih setelah perintah

sed -n  '1p ; $p' one.txt two.txt three.txt
_27 diabaikan. Teks yang akan ditambahkan dibaca sampai akhir baris

sed -n  '1p ; $p' one.txt two.txt three.txt
_35
sed -n  '1p ; $p' one.txt two.txt three.txt
32

Hapus baris yang cocok dengan alamat atau rentang alamat, dan tampilkan baris teks yang mengikuti perintah ini

Contoh. Ganti baris ke-2 hingga ke-4 dengan kata 'halo' dan 'dunia' (-. menunjukkan garis keluaran yang dicetak)

sed -i 's/hello/world/' file.txt
5

If no addresses are given, each line is replaced

Siklus baru dimulai setelah perintah ini selesai, karena ruang pola akan dihapus. Dalam contoh berikut,

sed -n  '1p ; $p' one.txt two.txt three.txt
_27 memulai siklus baru dan perintah substitusi tidak dijalankan pada teks yang diganti

sed -i 's/hello/world/' file.txt
_6

Sebagai ekstensi GNU, perintah dan teks

sed -n  '1p ; $p' one.txt two.txt three.txt
_27 dapat dipisahkan menjadi dua parameter
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
98, memungkinkan pembuatan skrip yang lebih mudah

sed -i 's/hello/world/' file.txt
_7

sed -n  '1p ; $p' one.txt two.txt three.txt
_80

Cetak nomor baris input saat ini (dengan baris baru di belakang)

sed -i 's/hello/world/' file.txt
_8

Sebagai ekstensi GNU, perintah ini menerima dua alamat

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
_17

Cetak ruang pola dalam bentuk yang tidak ambigu. karakter yang tidak dapat dicetak (dan karakter

sed -n  '1p ; $p' one.txt two.txt three.txt
_97) dicetak dalam bentuk escape gaya-C;

n menentukan panjang pembungkus garis yang diinginkan; . Jika dihilangkan, default seperti yang ditentukan pada baris perintah akan digunakan. Parameter n adalah ekstensi

sed -i 's/hello/world/' file.txt
22 GNU

sed -n  '1p ; $p' one.txt two.txt three.txt
_63

Membaca nama file file. Contoh

sed -i 's/hello/world/' file.txt
_9

Queue the contents of filename to be read and inserted into the output stream at the end of the current cycle, or when the next input line is read. Perhatikan bahwa jika nama file tidak dapat dibaca, itu dianggap sebagai file kosong, tanpa indikasi kesalahan

Sebagai ekstensi

sed -i 's/hello/world/' file.txt
22 GNU, nilai khusus /dev/stdin didukung untuk nama file, yang membaca isi input standar

Sebagai ekstensi GNU, perintah ini menerima dua alamat. File tersebut kemudian akan dibaca ulang dan disisipkan pada setiap baris alamat

sed -n  '1p ; $p' one.txt two.txt three.txt
_73

Tulis ruang pola ke nama file. As a GNU

sed -i 's/hello/world/' file.txt
22 extension, two special values of filename are supported. /dev/stderr, yang menulis hasil ke kesalahan standar, dan /dev/stdout, yang menulis ke keluaran standar

File akan dibuat (atau dipotong) sebelum baris masukan pertama dibaca;

sed -n  '1p ; $p' one.txt two.txt three.txt
_39

Jika ruang pola tidak berisi baris baru, mulailah siklus baru yang normal seolah-olah perintah ________0______36 dikeluarkan. Jika tidak, hapus teks dalam ruang pola hingga baris baru pertama, dan mulai ulang siklus dengan ruang pola yang dihasilkan, tanpa membaca baris input baru

sed -i 's/hello/world/' file.txt
_71

Tambahkan baris baru ke ruang pola, lalu tambahkan baris input berikutnya ke ruang pola. Jika tidak ada input lagi maka

sed -i 's/hello/world/' file.txt
_22 keluar tanpa memproses perintah lagi

Saat -z digunakan, nol byte (karakter ascii 'NUL') ditambahkan di antara baris (bukan baris baru)

Secara default

sed -i 's/hello/world/' file.txt
_22 tidak berhenti jika tidak ada jalur input 'berikutnya'. Ini adalah ekstensi GNU yang dapat dinonaktifkan dengan --posix. Lihat

sed -n  '1p ; $p' one.txt two.txt three.txt
_57

Cetak bagian dari ruang pola hingga baris baru pertama

sed -n  '1p ; $p' one.txt two.txt three.txt
_46

Ganti isi ruang tunggu dengan isi ruang pola

sed -n  '1p ; $p' one.txt two.txt three.txt
_47

Tambahkan baris baru ke konten ruang tunggu, lalu tambahkan konten ruang pola ke konten ruang tunggu

sed -n  '1p ; $p' one.txt two.txt three.txt
_44

Ganti isi ruang pola dengan isi ruang tunggu

sed -n  '1p ; $p' one.txt two.txt three.txt
_45

Tambahkan baris baru ke konten ruang pola, lalu tambahkan konten ruang penahan ke konten ruang pola

sed -n  '1p ; $p' one.txt two.txt three.txt
75

Tukarkan isi ruang penangguhan dan pola


3. 6 Perintah untuk sed -i 's/hello/world/' file.txt _22 guru

Dalam kebanyakan kasus, penggunaan perintah ini menunjukkan bahwa Anda mungkin lebih baik memprogram sesuatu seperti

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
41 atau Perl. But occasionally one is committed to sticking with
sed -i 's/hello/world/' file.txt
22, and these commands can enable one to write quite convoluted scripts

sed -n  '1p ; $p' one.txt two.txt three.txt
_81

[Tidak ada alamat yang diizinkan. ]

Tentukan lokasi label untuk perintah cabang. In all other respects, a no-op

sed -n  '1p ; $p' one.txt two.txt three.txt
_34

Cabang tanpa syarat untuk memberi label. Label dapat dihilangkan, dalam hal ini siklus berikutnya dimulai

sed -n  '1p ; $p' one.txt two.txt three.txt
_66

Cabang untuk diberi label hanya jika telah terjadi

sed -n  '1p ; $p' one.txt two.txt three.txt
67substitusi yang berhasil sejak baris input terakhir dibaca atau cabang bersyarat diambil. Label dapat dihilangkan, dalam hal ini siklus berikutnya dimulai


3. 7 Perintah Khusus untuk GNU sed -i 's/hello/world/' file.txt 22

Perintah-perintah ini khusus untuk GNU

sed -i 's/hello/world/' file.txt
22, jadi Anda harus menggunakannya dengan hati-hati dan hanya jika Anda yakin bahwa menghalangi portabilitas tidaklah buruk. Mereka memungkinkan Anda untuk memeriksa ekstensi
sed -i 's/hello/world/' file.txt
22 GNU atau untuk melakukan tugas yang cukup sering diperlukan, namun tidak didukung oleh
sed -i 's/hello/world/' file.txt
22 standar

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
_51

Perintah ini memungkinkan seseorang untuk menyalurkan input dari perintah shell ke ruang pola. Tanpa parameter, perintah

sed -n  '1p ; $p' one.txt two.txt three.txt
_41 mengeksekusi perintah yang ditemukan di ruang pola dan mengganti ruang pola dengan output;

Sebaliknya, jika parameter ditentukan, perintah ________19______41 menafsirkannya sebagai perintah dan mengirimkan keluarannya ke aliran keluaran. Perintah dapat dijalankan melintasi beberapa baris, semuanya kecuali yang terakhir diakhiri dengan garis miring terbalik

Dalam kedua kasus, hasilnya tidak terdefinisi jika perintah yang akan dieksekusi berisi karakter NUL

Perhatikan bahwa, tidak seperti perintah

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
_54, output dari perintah akan segera dicetak;

sed -n  '1p ; $p' one.txt two.txt three.txt
_43

Cetak nama file dari file input saat ini (dengan baris baru)

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
57

Perintah ini hanya menerima satu alamat

Perintah ini sama dengan

sed -n  '1p ; $p' one.txt two.txt three.txt
_00, tetapi tidak akan mencetak isi ruang pola. Seperti
sed -n  '1p ; $p' one.txt two.txt three.txt
_00, ini memberikan kemampuan untuk mengembalikan kode keluar ke penelepon

Perintah ini dapat berguna karena satu-satunya cara alternatif untuk menyelesaikan fungsi yang tampaknya sepele ini adalah dengan menggunakan opsi -n (yang dapat memperumit skrip Anda secara tidak perlu) atau beralih ke cuplikan berikut, yang menghabiskan waktu dengan membaca seluruh file tanpa efek yang terlihat

sed -n  '1p ; $p' one.txt two.txt three.txt
_0

sed -n  '1p ; $p' one.txt two.txt three.txt
_64

Antrean baris nama file untuk dibaca dan dimasukkan ke dalam aliran output pada akhir siklus saat ini, atau saat baris input berikutnya dibaca. Perhatikan bahwa jika nama file tidak dapat dibaca, atau jika akhirnya tercapai, tidak ada baris yang ditambahkan, tanpa indikasi kesalahan

Seperti perintah

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
_54, nilai khusus /dev/stdin didukung untuk nama file, yang membaca baris dari input standar

sed -n  '1p ; $p' one.txt two.txt three.txt
_68

Cabang untuk diberi label hanya jika tidak ada

sed -n  '1p ; $p' one.txt two.txt three.txt
67pergantian yang berhasil sejak baris input terakhir dibaca atau cabang bersyarat diambil. Label dapat dihilangkan, dalam hal ini siklus berikutnya dimulai

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
_64

Perintah ini tidak melakukan apa-apa, tetapi membuat

sed -i 's/hello/world/' file.txt
_22 gagal jika ekstensi GNU
sed -i 's/hello/world/' file.txt
22 tidak didukung, hanya karena versi
sed -i 's/hello/world/' file.txt
22 lainnya tidak menerapkannya. Selain itu, Anda dapat menentukan versi
sed -i 's/hello/world/' file.txt
22 yang dibutuhkan skrip Anda, seperti
sed OPTIONS.. [SCRIPT] [INPUTFILE...]
69. Standarnya adalah
sed OPTIONS.. [SCRIPT] [INPUTFILE...]
_70 karena itu adalah versi pertama yang mengimplementasikan perintah ini

Perintah ini mengaktifkan semua ekstensi GNU meskipun

sed -i 's/hello/world/' file.txt
72 diatur di lingkungan

sed -n  '1p ; $p' one.txt two.txt three.txt
_74

Tulis ke nama file yang diberikan bagian dari ruang pola hingga baris baru pertama. Semua yang dikatakan di bawah perintah

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
_26 tentang penanganan file juga berlaku di sini

sed -n  '1p ; $p' one.txt two.txt three.txt
_77

Perintah ini mengosongkan konten ruang pola. Biasanya sama dengan 's/. *//’, tetapi lebih efisien dan berfungsi dengan adanya urutan multibyte yang tidak valid dalam aliran input. POSIX mengamanatkan bahwa urutan tersebut tidak cocok dengan '. ’, sehingga tidak ada cara portabel untuk menghapus buffer

sed -i 's/hello/world/' file.txt
22 di tengah skrip di sebagian besar lokal multibyte (termasuk lokal UTF-8)


3. 8 Sintaks beberapa perintah

Ada beberapa metode untuk menentukan banyak perintah dalam program

sed -i 's/hello/world/' file.txt
22

Menggunakan baris baru paling alami saat menjalankan skrip sed dari file (menggunakan opsi -f)

Pada baris perintah, semua perintah

sed -i 's/hello/world/' file.txt
_22 dapat dipisahkan oleh baris baru. Alternatifnya, Anda dapat menentukan setiap perintah sebagai argumen untuk opsi -e

sed -n  '1p ; $p' one.txt two.txt three.txt
_1

Titik koma (';') dapat digunakan untuk memisahkan sebagian besar perintah sederhana

sed -n  '1p ; $p' one.txt two.txt three.txt
_2

Perintah ________21______78,

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
79,
sed -n  '1p ; $p' one.txt two.txt three.txt
82,
sed -n  '1p ; $p' one.txt two.txt three.txt
83,
sed -n  '1p ; $p' one.txt two.txt three.txt
84,
sed OPTIONS.. [SCRIPT] [INPUTFILE...]
83 dapat dipisahkan dengan titik koma (ini adalah ekstensi
sed -i 's/hello/world/' file.txt
22 GNU non-portabel)

sed -n  '1p ; $p' one.txt two.txt three.txt
_3

Labels used in

sed -n  '1p ; $p' one.txt two.txt three.txt
82,
sed -n  '1p ; $p' one.txt two.txt three.txt
83,
sed -n  '1p ; $p' one.txt two.txt three.txt
84,
sed OPTIONS.. [SCRIPT] [INPUTFILE...]
83 commands are read until a semicolon. Leading and trailing whitespace is ignored. Dalam contoh di bawah labelnya adalah 'x'. Contoh pertama bekerja dengan GNU
sed -i 's/hello/world/' file.txt
22. Yang kedua adalah padanan portabel. Untuk informasi lebih lanjut tentang percabangan dan label, lihat

sed -n  '1p ; $p' one.txt two.txt three.txt
_4

3. 8. 1 Perintah Membutuhkan baris baru

Perintah berikut tidak dapat dipisahkan dengan titik koma dan memerlukan baris baru

sed -n  '1p ; $p' one.txt two.txt three.txt
26,
sed -n  '1p ; $p' one.txt two.txt three.txt
27,
sed -n  '1p ; $p' one.txt two.txt three.txt
28 (tambahkan/ubah/sisipkan)

Semua karakter mengikuti

sed -n  '1p ; $p' one.txt two.txt three.txt
26,
sed -n  '1p ; $p' one.txt two.txt three.txt
27,
sed -n  '1p ; $p' one.txt two.txt three.txt
28 perintah diambil sebagai teks untuk menambahkan/mengubah/menyisipkan. Menggunakan titik koma menyebabkan hasil yang tidak diinginkan

sed -n  '1p ; $p' one.txt two.txt three.txt
_5

Pisahkan perintah menggunakan -e atau baris baru

sed -n  '1p ; $p' one.txt two.txt three.txt
_6

Perhatikan bahwa menentukan teks untuk ditambahkan ('Halo') segera setelah

sed -n  '1p ; $p' one.txt two.txt three.txt
26,
sed -n  '1p ; $p' one.txt two.txt three.txt
27,
sed -n  '1p ; $p' one.txt two.txt three.txt
28 itu sendiri merupakan ekstensi
sed -i 's/hello/world/' file.txt
22 GNU. Alternatif portabel yang sesuai dengan POSIX adalah

sed -n  '1p ; $p' one.txt two.txt three.txt
_7

sed -n  '1p ; $p' one.txt two.txt three.txt
_78 (komentar)

Semua karakter setelah '#' hingga baris baru berikutnya diabaikan

sed -n  '1p ; $p' one.txt two.txt three.txt
_8

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
54,
sed -i 's/hello/world/' file.txt
88,
sed OPTIONS.. [SCRIPT] [INPUTFILE...]
26,
sed -i 's/hello/world/' file.txt
33 (membaca dan menulis file)

Perintah ________23______54,

sed -i 's/hello/world/' file.txt
88,
sed OPTIONS.. [SCRIPT] [INPUTFILE...]
26,
sed -i 's/hello/world/' file.txt
33 mengurai nama file hingga akhir baris. Jika spasi, komentar, atau titik koma ditemukan, mereka akan dimasukkan ke dalam nama file, yang mengarah ke hasil yang tidak diharapkan

sed -n  '1p ; $p' one.txt two.txt three.txt
_9

Perhatikan bahwa

sed -i 's/hello/world/' file.txt
_22 diam-diam mengabaikan kesalahan baca/tulis di
sed OPTIONS.. [SCRIPT] [INPUTFILE...]
54,
sed -i 's/hello/world/' file.txt
88,
sed OPTIONS.. [SCRIPT] [INPUTFILE...]
26,
sed -i 's/hello/world/' file.txt
33 perintah (seperti file yang hilang). Dalam contoh berikut,
sed -i 's/hello/world/' file.txt
_22 mencoba membaca file bernama 'hello. txt ; . File hilang, dan kesalahan diabaikan secara diam-diam

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
0

sed -n  '1p ; $p' one.txt two.txt three.txt
_41 (eksekusi perintah)

Karakter apa pun yang mengikuti perintah

sed -n  '1p ; $p' one.txt two.txt three.txt
_41 hingga akhir baris akan dikirim ke shell. Jika spasi, komentar, atau titik koma ditemukan, mereka akan disertakan dalam perintah shell, yang mengarah ke hasil yang tidak diharapkan

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
1

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_17 (pengganti dengan
sed -n  '1p ; $p' one.txt two.txt three.txt
41 atau
sed OPTIONS.. [SCRIPT] [INPUTFILE...]
26 bendera)

Dalam perintah substitusi, flag

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
_26 menulis hasil substitusi ke file, dan flag
sed -n  '1p ; $p' one.txt two.txt three.txt
41 mengeksekusi hasil substitusi sebagai perintah shell. Seperti perintah
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_22, ini harus diakhiri dengan baris baru. Jika spasi, komentar, atau titik koma ditemukan, mereka akan disertakan dalam perintah shell atau nama file, yang mengarah ke hasil yang tidak terduga

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
2


4 Alamat. memilih baris


4. 1 Ikhtisar alamat

Alamat menentukan pada baris mana perintah ________0______22 akan dieksekusi. Perintah berikut mengganti kata 'halo' dengan 'dunia' hanya pada baris 144

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
3

Jika tidak ada alamat yang diberikan, perintah dilakukan di semua lini. Perintah berikut menggantikan kata 'halo' dengan 'dunia' di semua baris dalam file input

sed 's/hello/world/' input.txt > output.txt
_

Alamat dapat berisi ekspresi reguler untuk mencocokkan baris berdasarkan konten, bukan nomor baris. Perintah berikut mengganti kata 'halo' dengan 'dunia' hanya pada baris yang mengandung kata 'apel'

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
5

Rentang alamat ditentukan dengan dua alamat yang dipisahkan oleh koma (

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
24). Alamat dapat berupa numerik, ekspresi reguler, atau campuran keduanya. Perintah berikut mengganti kata 'halo' dengan 'dunia' hanya pada baris 4 sampai 17 (inklusif)

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
6

Menambahkan

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
25 karakter ke akhir spesifikasi alamat (sebelum huruf perintah) meniadakan rasa kecocokan. Artinya, jika karakter
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_25 mengikuti alamat atau rentang alamat, maka hanya baris yang tidak cocok dengan alamat yang akan dipilih. Perintah berikut mengganti kata 'halo' dengan 'dunia' hanya pada baris yang tidak mengandung kata 'apel'

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
7

Perintah berikut ini mengganti kata ‘hello’ dengan ‘world’ hanya pada baris 1 sampai 3 dan 18 sampai baris terakhir file input (i. e. tidak termasuk baris 4 sampai 17)

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
8


4. 2 Memilih garis dengan angka

Alamat dalam skrip

sed -i 's/hello/world/' file.txt
_22 dapat berupa salah satu dari bentuk berikut

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
28

Menentukan nomor baris hanya akan cocok dengan baris tersebut di input. (Perhatikan bahwa

sed -i 's/hello/world/' file.txt
22 menghitung baris secara terus-menerus di semua file input kecuali opsi -i atau -s ditentukan. )

sed -i 's/hello/world/' file.txt
_87

Alamat ini cocok dengan baris terakhir dari file input terakhir, atau baris terakhir dari setiap file ketika opsi -i atau -s ditentukan

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_31

Ekstensi GNU ini cocok dengan setiap baris langkah yang dimulai dengan baris pertama. Secara khusus, garis akan dipilih ketika ada non-negatif n sedemikian rupa sehingga nomor baris saat ini sama dengan + pertama (n * langkah). Jadi, seseorang akan menggunakan

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_32 untuk memilih baris bernomor ganjil dan
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
33 untuk baris bernomor genap;

Perintah berikut menunjukkan penggunaan alamat langkah

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
_9


4. 3 memilih baris dengan pencocokan teks

GNU

sed -i 's/hello/world/' file.txt
_22 mendukung alamat ekspresi reguler berikut. Ekspresi reguler default adalah. Jika opsi -E atau -r digunakan, Ekspresi reguler harus dalam sintaks. Lihat

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_36

Ini akan memilih baris mana pun yang cocok dengan ekspresi reguler regexp. Jika regexp itu sendiri menyertakan

sed -n  '1p ; $p' one.txt two.txt three.txt
_94 karakter, masing-masing harus diloloskan dengan garis miring terbalik (
sed -n  '1p ; $p' one.txt two.txt three.txt
97)

Perintah berikut mencetak baris di /etc/passwd yang diakhiri dengan 'bash'

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
0

Ekspresi reguler kosong '//' mengulangi pencocokan ekspresi reguler terakhir (sama berlaku jika ekspresi reguler kosong diteruskan ke perintah

sed -n  '1p ; $p' one.txt two.txt three.txt
67). Perhatikan bahwa pengubah ekspresi reguler dievaluasi saat ekspresi reguler dikompilasi, sehingga tidak valid untuk menentukannya bersama dengan ekspresi reguler kosong

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_40

(The

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_41 dapat diganti dengan karakter tunggal lainnya. )

Ini juga cocok dengan regexp ekspresi reguler, tetapi memungkinkan seseorang untuk menggunakan pembatas yang berbeda dari

sed -n  '1p ; $p' one.txt two.txt three.txt
94. Ini sangat berguna jika regexp itu sendiri mengandung banyak garis miring, karena menghindari pelarian yang membosankan dari setiap
sed -n  '1p ; $p' one.txt two.txt three.txt
94. Jika regexp itu sendiri menyertakan karakter pembatas, masing-masing harus diloloskan dengan garis miring terbalik (
sed -n  '1p ; $p' one.txt two.txt three.txt
97)

Perintah berikut ini setara. Mereka mencetak baris yang dimulai dengan '/home/alice/documents/'

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
_1

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_45
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
46

Pengubah

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
_45 untuk pencocokan ekspresi reguler adalah ekstensi GNU yang menyebabkan regexp dicocokkan dengan cara yang tidak sensitif huruf

Dalam banyak bahasa pemrograman lainnya, huruf kecil

sed -n  '1p ; $p' one.txt two.txt three.txt
28 digunakan untuk pencocokan ekspresi reguler yang tidak sensitif huruf besar-kecil. Namun, di
sed -i 's/hello/world/' file.txt
22
sed -n  '1p ; $p' one.txt two.txt three.txt
28 digunakan untuk perintah insert (lihat )

Observe the difference between the following examples

Dalam contoh ini,

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_51 adalah alamatnya. ekspresi reguler dengan pengubah
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
45.
sed -i 's/hello/world/' file.txt
_36 adalah perintah hapus

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
_2

Di sini,

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_54 adalah alamatnya. ekspresi reguler.
sed -n  '1p ; $p' one.txt two.txt three.txt
_28 adalah perintah insert.
sed -i 's/hello/world/' file.txt
_36 adalah nilai yang akan dimasukkan. Baris dengan 'd' kemudian disisipkan di atas baris yang cocok

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
_3

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_57
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
58

The

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
49 modifier to regular-expression matching is a GNU
sed -i 's/hello/world/' file.txt
22 extension which directs GNU
sed -i 's/hello/world/' file.txt
22 to match the regular expression in multi-line mode. The modifier causes
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
54 and
sed -i 's/hello/world/' file.txt
87 to match respectively (in addition to the normal behavior) the empty string after a newline, and the empty string before a newline. There are special character sequences (
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
56 and
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
57) which always match the beginning or the end of the buffer. In addition, the period character does not match a new-line character in multi-line mode

Alamat regex beroperasi pada konten ruang pola saat ini. Jika ruang pola diubah (misalnya dengan perintah

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
66) pencocokan ekspresi reguler akan beroperasi pada teks yang diubah

Dalam contoh berikut, pencetakan otomatis dinonaktifkan dengan -n. Perintah ________35______67 mengubah baris yang berisi '2' menjadi 'X'. Perintah

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_68 mencocokkan garis dengan angka dan mencetaknya. Karena baris kedua diubah sebelum
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
69 regex, itu tidak akan cocok dan tidak akan dicetak

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
_4


4. 4 Rentang Alamat

Rentang alamat dapat ditentukan dengan menentukan dua alamat yang dipisahkan oleh koma (

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
24). Rentang alamat cocok dengan garis mulai dari tempat alamat pertama cocok, dan berlanjut hingga alamat kedua cocok (inklusif)

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
_5

Jika alamat kedua adalah regexp, maka pemeriksaan kecocokan akhir akan dimulai dengan baris mengikuti baris yang cocok dengan alamat pertama. rentang akan selalu menjangkau setidaknya dua baris (kecuali tentu saja jika aliran input berakhir)

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
_6

Jika alamat kedua adalah angka yang kurang dari (atau sama dengan) baris yang cocok dengan alamat pertama, maka hanya satu baris yang cocok

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
_7

GNU

sed -i 's/hello/world/' file.txt
_22 juga mendukung beberapa formulir dua alamat khusus;

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_72

Nomor baris

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
73 dapat digunakan dalam spesifikasi alamat seperti
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
72 sehingga
sed -i 's/hello/world/' file.txt
22 akan mencoba mencocokkan regexp di baris input pertama juga. Dengan kata lain,
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_72 mirip dengan
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
77, kecuali bahwa jika addr2 cocok dengan baris input pertama, formulir
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
72 akan menganggapnya sebagai akhir rentang, sedangkan formulir
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
77 akan cocok dengan awal rentangnya dan karenanya membuat rentang rentang naik

Perhatikan bahwa ini adalah satu-satunya tempat di mana alamat ________35______73 masuk akal;

Contoh berikut menunjukkan perbedaan antara memulai dengan alamat 1 dan 0

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
_8

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_82

Mencocokkan addr1 dan garis N yang mengikuti addr1

sed OPTIONS.. [SCRIPT] [INPUTFILE...]
_9

addr1 dapat berupa nomor baris atau ekspresi reguler

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_83

Mencocokkan addr1 dan baris yang mengikuti addr1 hingga baris berikutnya yang nomor baris inputnya adalah kelipatan N. Perintah berikut mencetak mulai dari baris 6, hingga baris berikutnya yang merupakan kelipatan 4 (mis. e. baris 8)

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_0

addr1 dapat berupa nomor baris atau ekspresi reguler


5 Ekspresi Reguler. memilih teks


5. 1 Gambaran ekspresi reguler di sed -i 's/hello/world/' file.txt 22

Untuk mengetahui cara menggunakan

sed -i 's/hello/world/' file.txt
_22, orang harus memahami ekspresi reguler (singkatnya regexp). Ekspresi reguler adalah pola yang dicocokkan dengan string subjek dari kiri ke kanan. Sebagian besar karakter biasa saja. mereka berdiri sendiri dalam suatu pola, dan cocok dengan karakter yang sesuai. Ekspresi reguler di
sed -i 's/hello/world/' file.txt
_22 ditentukan di antara dua garis miring

Perintah berikut mencetak baris yang berisi kata 'halo'

Contoh di atas setara dengan perintah ________35______87 ini

The power of regular expressions comes from the ability to include alternatives and repetitions in the pattern. Ini dikodekan dalam pola dengan menggunakan karakter khusus, yang tidak berdiri sendiri tetapi ditafsirkan dalam beberapa cara khusus

Karakter

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
_54 (tanda sisipan) dalam ekspresi reguler cocok dengan awal baris. Karakter
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_89 (titik) cocok dengan karakter tunggal mana pun. Perintah
sed -i 's/hello/world/' file.txt
_22 berikut cocok dan mencetak baris yang dimulai dengan huruf 'b', diikuti oleh karakter tunggal, diikuti dengan huruf 'd'

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_1

Bagian berikut menjelaskan arti dan penggunaan karakter khusus dalam ekspresi reguler


5. 2 Ekspresi reguler dasar (BRE) dan ekstensi (ERE).

Ekspresi reguler dasar dan diperluas adalah dua variasi sintaks dari pola yang ditentukan. Sintaks Ekspresi Reguler Dasar (BRE) adalah default di

sed -i 's/hello/world/' file.txt
22 (dan serupa di
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
87). Gunakan opsi -E yang ditentukan POSIX (-r, --regexp-extended) untuk mengaktifkan sintaks Extended Regular Expression (ERE)

Di GNU

sed -i 's/hello/world/' file.txt
_22, satu-satunya perbedaan antara ekspresi reguler dasar dan ekstensi adalah perilaku beberapa karakter khusus. '?', '+', tanda kurung, kurung kurawal ('{}'), dan '. ’

Dengan sintaks dasar (BRE), karakter ini tidak memiliki arti khusus kecuali diawali dengan garis miring terbalik ('\'); . karakter ini spesial kecuali jika diawali dengan garis miring terbalik ('\')

Desired patternBasic (BRE) SyntaxExtended (ERE) Syntaxliteral '+' (tanda tambah)

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_2

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_3

Satu atau lebih karakter 'a' diikuti oleh 'b' (tanda tambah sebagai karakter meta khusus)

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
4

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_5


5. 3 Tinjauan tentang sintaks ekspresi reguler dasar

Berikut adalah deskripsi singkat sintaks ekspresi reguler seperti yang digunakan dalam

sed -i 's/hello/world/' file.txt
22

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_95

A single ordinary character matches itself

sed -i 's/hello/world/' file.txt
_60

Mencocokkan urutan nol atau lebih contoh kecocokan untuk ekspresi reguler sebelumnya, yang harus berupa karakter biasa, karakter khusus yang diawali dengan

sed -n  '1p ; $p' one.txt two.txt three.txt
97,
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
89, grup regexp (lihat di bawah), atau ekspresi tanda kurung. Sebagai ekstensi GNU, regular expression postfix juga dapat diikuti oleh
sed -i 's/hello/world/' file.txt
60; . POSIX 1003. 1-2001 mengatakan bahwa
sed -i 's/hello/world/' file.txt
_60 berdiri untuk dirinya sendiri ketika muncul di awal ekspresi reguler atau subekspresi, tetapi banyak implementasi nonGNU tidak mendukung ini dan skrip portabel seharusnya menggunakan
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
03 dalam konteks ini

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
89

Matches any character, including newline

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
54

Matches the null string at beginning of the pattern space, i. e. what appears after the circumflex must appear at the beginning of the pattern space

In most scripts, pattern space is initialized to the content of each line (see ). So, it is a useful simplification to think of

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
07 as matching only lines where ‘#include’ is the first thing on line—if there are spaces before, for example, the match fails. This simplification is valid as long as the original content of pattern space is not modified, for example with an
sed -n  '1p ; $p' one.txt two.txt three.txt
67 command

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
54 acts as a special character only at the beginning of the regular expression or subexpression (that is, after
sed -n  '1p ; $p' one.txt two.txt three.txt
91 or
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
11). Portable scripts should avoid
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
54 at the beginning of a subexpression, though, as POSIX allows implementations that treat
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
54 as an ordinary character in that context

sed -i 's/hello/world/' file.txt
_87

It is the same as

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
54, but refers to end of pattern space.
sed -i 's/hello/world/' file.txt
87 also acts as a special character only at the end of the regular expression or subexpression (that is, before
sed -n  '1p ; $p' one.txt two.txt three.txt
92 or
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
11), and its use at the end of a subexpression is not portable

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
19
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
20

Matches any single character in list. for example,

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
21 matches all vowels. A list may include sequences like
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
22, which matches any character between (inclusive) char1 and char2. See

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
23

As

sed -i 's/hello/world/' file.txt
60, but matches one or more. It is a GNU extension

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
25

As

sed -i 's/hello/world/' file.txt
60, but only matches zero or one. It is a GNU extension

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
27

As

sed -i 's/hello/world/' file.txt
60, but matches exactly i sequences (i is a decimal integer; for portability, keep it between 0 and 255 inclusive)

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
29

Matches between i and j, inclusive, sequences

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
30

Matches more than or equal to i sequences

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
31

Groups the inner regexp as a whole, this is used to

  • Apply postfix operators, like
    # WRONG USAGE: 'FILE' will be truncated.
    sed -ni 's/foo/bar/' FILE
    
    32. this will search for zero or more whole sequences of ‘abcd’, while
    # WRONG USAGE: 'FILE' will be truncated.
    sed -ni 's/foo/bar/' FILE
    
    33 would search for ‘abc’ followed by zero or more occurrences of ‘d’. Note that support for
    # WRONG USAGE: 'FILE' will be truncated.
    sed -ni 's/foo/bar/' FILE
    
    32 is required by POSIX 1003. 1-2001, but many non-GNU implementations do not support it and hence it is not universally portable
  • Use back references (see below)
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
35

Matches either regexp1 or regexp2. Use parentheses to use complex alternative regular expressions. The matching process tries each alternative in turn, from left to right, and the first one that succeeds is used. It is a GNU extension

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
36

Matches the concatenation of regexp1 and regexp2. Concatenation binds more tightly than

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
11,
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
54, and
sed -i 's/hello/world/' file.txt
87, but less tightly than the other regular expression operators

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
40

Matches the digit-th

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
41 parenthesized subexpression in the regular expression. This is called a back reference. Subexpressions are implicitly numbered by counting occurrences of
sed -n  '1p ; $p' one.txt two.txt three.txt
91 left-to-right

sed -n  '1p ; $p' one.txt two.txt three.txt
90

Matches the newline character

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
44

Matches char, where char is one of

sed -i 's/hello/world/' file.txt
87,
sed -i 's/hello/world/' file.txt
60,
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
89,
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
48,
sed -n  '1p ; $p' one.txt two.txt three.txt
97, or
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
54. Note that the only C-like backslash sequences that you can portably assume to be interpreted are
sed -n  '1p ; $p' one.txt two.txt three.txt
90 and
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
95; in particular
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
53 is not portable, and matches a ‘t’ under most implementations of
sed -i 's/hello/world/' file.txt
22, rather than a tab character

Note that the regular expression matcher is greedy, i. e. , matches are attempted from left to right and, if two or more matches are possible starting at the same character, it selects the longest

Examples

‘abcdef’

Matches ‘abcdef’

‘a*b’

Matches zero or more ‘a’s followed by a single ‘b’. For example, ‘b’ or ‘aaaaab’

‘a\?b’

Matches ‘b’ or ‘ab’

‘a\+b\+’

Matches one or more ‘a’s followed by one or more ‘b’s. ‘ab’ is the shortest possible match, but other examples are ‘aaaab’ or ‘abbbbb’ or ‘aaaaaabbbbbbb’

‘. *’‘. \+’

These two both match all the characters in a string; however, the first matches every string (including the empty string), while the second matches only strings containing at least one character

‘^main. *(. *)’

This matches a string starting with ‘main’, followed by an opening and closing parenthesis. The ‘n’, ‘(’ and ‘)’ need not be adjacent

‘^#’

This matches a string beginning with ‘#’

‘\\$’

This matches a string ending with a single backslash. The regexp contains two backslashes for escaping

‘\$’

Instead, this matches a string consisting of a single dollar sign, because it is escaped

‘[a-zA-Z0-9]’

In the C locale, this matches any ASCII letters or digits

‘[^ TAB]\+’

(Here TAB stands for a single tab character. ) This matches a string of one or more characters, none of which is a space or a tab. Usually this means a word

‘^\(. *\)\n\1$’

This matches a string consisting of two equal substrings separated by a newline

‘. \{9\}A$’

This matches nine characters followed by an ‘A’ at the end of a line

‘^. \{15\}A’

This matches the start of a string that contains 16 characters, the last of which is an ‘A’


5. 4 Overview of extended regular expression syntax

The only difference between basic and extended regular expressions is in the behavior of a few characters. ‘?’, ‘+’, parentheses, braces (‘{}’), and ‘. ’. While basic regular expressions require these to be escaped if you want them to behave as special characters, when using extended regular expressions you must escape them if you want them to match a literal character. ‘. ’ is special here because ‘\. ’ is a GNU extension – standard basic regular expressions do not provide its functionality

Examples

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
55

becomes ‘abc\?’ when using extended regular expressions. It matches the literal string ‘abc?’

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
56

becomes ‘c+’ when using extended regular expressions. It matches one or more ‘c’s

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
57

becomes ‘a{3,}’ when using extended regular expressions. It matches three or more ‘a’s

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
58

becomes ‘(abc){2,3}’ when using extended regular expressions. It matches either ‘abcabc’ or ‘abcabcabc’

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
59

becomes ‘(abc*)\1’ when using extended regular expressions. Backreferences must still be escaped when using extended regular expressions

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
60

becomes ‘a. b’ when using extended regular expressions. It matches ‘a’ or ‘b’


5. 5 Character Classes and Bracket Expressions

A bracket expression is a list of characters enclosed by ‘[’ and ‘]’. It matches any single character in that list; if the first character of the list is the caret ‘^’, then it matches any character not in the list. For example, the following command replaces the words ‘gray’ or ‘grey’ with ‘blue’

Bracket expressions can be used in both and regular expressions (that is, with or without the -E/-r options)

Within a bracket expression, a range expression consists of two characters separated by a hyphen. It matches any single character that sorts between the two characters, inclusive. In the default C locale, the sorting sequence is the native character order; for example, ‘[a-d]’ is equivalent to ‘[abcd]’

Finally, certain named classes of characters are predefined within bracket expressions, as follows

Kelas bernama ini harus digunakan di dalam tanda kurung itu sendiri. Penggunaan yang benar

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_6

Penggunaan yang salah ditolak oleh versi

sed -i 's/hello/world/' file.txt
22 yang lebih baru. Versi yang lebih lama menerimanya tetapi memperlakukannya sebagai ekspresi braket tunggal (yang setara dengan '[dgit. ]’, yaitu hanya karakter d/g/i/t/. )

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
_7

'[. alnum. ]’

Karakter alfanumerik. '[. alpha. ]' dan '[. angka. ]’; in the ‘C’ locale and ASCII character encoding, this is the same as ‘[0-9A-Za-z]’

‘[. alpha. ]’

Alphabetic characters. ‘[. lower. ]’ and ‘[. upper. ]’; in the ‘C’ locale and ASCII character encoding, this is the same as ‘[A-Za-z]’

‘[. blank. ]’

Blank characters. space and tab

‘[. cntrl. ]’

Control characters. In ASCII, these characters have octal codes 000 through 037, and 177 (DEL). In other character sets, these are the equivalent characters, if any

‘[. digit. ]’

Digits.

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
62

‘[. graph. ]’

Graphical characters. ‘[. alnum. ]’ and ‘[. punct. ]’

‘[. lower. ]’

Lower-case letters; in the ‘C’ locale and ASCII character encoding, this is

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
63

‘[. print. ]’

Printable characters. ‘[. alnum. ]’, ‘[. punct. ]’, and space

‘[. punct. ]’

Punctuation characters; in the ‘C’ locale and ASCII character encoding, this is

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
64

‘[. space. ]’

Space characters. in the ‘C’ locale, this is tab, newline, vertical tab, form feed, carriage return, and space

‘[. upper. ]’

Upper-case letters. in the ‘C’ locale and ASCII character encoding, this is

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
65

‘[. xdigit. ]’

Hexadecimal digits.

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
66

Note that the brackets in these class names are part of the symbolic names, and must be included in addition to the brackets delimiting the bracket expression

Most meta-characters lose their special meaning inside bracket expressions

‘]’

ends the bracket expression if it’s not the first list item. So, if you want to make the ‘]’ character a list item, you must put it first

‘-’

represents the range if it’s not first or last in a list or the ending point of a range

‘^’

represents the characters not in the list. If you want to make the ‘^’ character a list item, place it anywhere but first

TODO. incorporate this paragraph (copied verbatim from BRE section)

The characters

sed -i 's/hello/world/' file.txt
87,
sed -i 's/hello/world/' file.txt
60,
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
89,
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
48, and
sed -n  '1p ; $p' one.txt two.txt three.txt
97 are normally not special within list. For example,
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
72 matches either ‘\’ or ‘*’, because the
sed -n  '1p ; $p' one.txt two.txt three.txt
97 is not special here. However, strings like
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
74,
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
75, and
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
76 are special within list and represent collating symbols, equivalence classes, and character classes, respectively, and
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
48 is therefore special within list when it is followed by
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
89,
sed -n  '1p ; $p' one.txt two.txt three.txt
80, or
sed OPTIONS.. [SCRIPT] [INPUTFILE...]
83. Also, when not in
sed -i 's/hello/world/' file.txt
72 mode, special escapes like
sed -n  '1p ; $p' one.txt two.txt three.txt
90 and
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
53 are recognized within list. See

‘[. ’

represents the open collating symbol

‘. ]’

represents the close collating symbol

‘[=’

represents the open equivalence class

‘=]’

represents the close equivalence class

‘[. ’

represents the open character class symbol, and should be followed by a valid character class name

‘. ]’

represents the close character class symbol


5. 6 regular expression extensions

The following sequences have special meaning inside regular expressions (used in and the

sed -n  '1p ; $p' one.txt two.txt three.txt
67 command)

These can be used in both and regular expressions (that is, with or without the -E/-r options)

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
85

Matches any “word” character. A “word” character is any letter or digit or the underscore character

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
8

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
86

Matches any “non-word” character

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
9

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
87

Matches a word boundary; that is it matches if the character to the left is a “word” character and the character to the right is a “non-word” character, or vice-versa

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
0

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
88

Matches everywhere but on a word boundary; that is it matches if the character to the left and the character to the right are either both “word” characters or both “non-word” characters

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
1

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
89

Matches whitespace characters (spaces and tabs). Newlines embedded in the pattern/hold spaces will also match

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
2

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
90

Matches non-whitespace characters

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
3

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
91

Matches the beginning of a word

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
4

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
92

Matches the end of a word

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
5

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
56

Matches only at the start of pattern space. This is different from

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
54 in multi-line mode

Compare the following two examples

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
6

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
57

Matches only at the end of pattern space. This is different from

sed -i 's/hello/world/' file.txt
87 in multi-line mode


5. 7 Back-references and Subexpressions

back-references are regular expression commands which refer to a previous part of the matched regular expression. Back-references are specified with backslash and a single digit (e. g. ‘\1’). Bagian dari ekspresi reguler yang mereka rujuk disebut subekspresi, dan ditandai dengan tanda kurung

Referensi balik dan subekspresi digunakan dalam dua kasus. in the regular expression search pattern, and in the replacement part of the

sed -n  '1p ; $p' one.txt two.txt three.txt
67 command (see and )

In a regular expression pattern, back-references are used to match the same content as a previously matched subexpression. Dalam contoh berikut, subekspresi adalah '. ' - karakter tunggal apa pun (dikelilingi oleh tanda kurung menjadikannya subekspresi). Referensi belakang '\1' meminta untuk mencocokkan konten yang sama (karakter yang sama) sebagai sub-ekspresi

The command below matches words starting with any character, followed by the letter ‘o’, followed by the same character as the first

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
7

Multiple subexpressions are automatically numbered from left-to-right. This command searches for 6-letter palindromes (the first three letters are 3 subexpressions, followed by 3 back-references in reverse order)

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
_8

Pada perintah

sed -n  '1p ; $p' one.txt two.txt three.txt
_67, referensi balik dapat digunakan di bagian pengganti untuk merujuk kembali ke subekspresi di bagian regexp

Contoh berikut menggunakan dua subekspresi dalam ekspresi reguler untuk mencocokkan dua kata yang dipisahkan spasi. Referensi belakang di bagian pengganti mencetak kata-kata dalam urutan yang berbeda

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
9

When used with alternation, if the group does not participate in the match then the back-reference makes the whole match fail. For example, ‘a(. ). b\1’ will not match ‘ba’. When multiple regular expressions are given with -e or from a file (‘-f file’), back-references are local to each expression


5. 8 Escape Sequences - specifying special characters

Until this chapter, we have only encountered escapes of the form ‘\^’, which tell

sed -i 's/hello/world/' file.txt
22 not to interpret the circumflex as a special character, but rather to take it literally. For example, ‘\*’ matches a single asterisk rather than zero or more backslashes

This chapter introduces another kind of escape—that is, escapes that are applied to a character or sequence of characters that ordinarily are taken literally, and that

sed -i 's/hello/world/' file.txt
22 replaces with a special character. This provides a way of encoding non-printable characters in patterns in a visible manner. There is no restriction on the appearance of non-printing characters in a
sed -i 's/hello/world/' file.txt
22 script but when a script is being prepared in the shell or by text editing, it is usually easier to use one of the following escape sequences than the binary character it represents

The list of these escapes is

$ echo | sed 'Q42' ; echo $?
42
02

Produces or matches a BEL character, that is an “alert” (ASCII 7)

$ echo | sed 'Q42' ; echo $?
42
03

Produces or matches a form feed (ASCII 12)

sed -n  '1p ; $p' one.txt two.txt three.txt
90

Produces or matches a newline (ASCII 10)

$ echo | sed 'Q42' ; echo $?
42
05

Produces or matches a carriage return (ASCII 13)

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
53

Produces or matches a horizontal tab (ASCII 9)

$ echo | sed 'Q42' ; echo $?
42
07

Produces or matches a so called “vertical tab” (ASCII 11)

$ echo | sed 'Q42' ; echo $?
42
08

Produces or matches CONTROL-x, where x is any character. The precise effect of ‘\cx’ is as follows. if x is a lower case letter, it is converted to upper case. Then bit 6 of the character (hex 40) is inverted. Thus ‘\cz’ becomes hex 1A, but ‘\c{’ becomes hex 3B, while ‘\c;’ becomes hex 7B

$ echo | sed 'Q42' ; echo $?
42
09

Produces or matches a character whose decimal ASCII value is xxx

$ echo | sed 'Q42' ; echo $?
42
10

Produces or matches a character whose octal ASCII value is xxx

$ echo | sed 'Q42' ; echo $?
42
11

Produces or matches a character whose hexadecimal ASCII value is xx

‘\b’ (backspace) was omitted because of the conflict with the existing “word boundary” meaning

5. 8. 1 Escaping Precedence

GNU

sed -i 's/hello/world/' file.txt
22 processes escape sequences before passing the text onto the regular-expression matching of the
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
66 command and Address matching. Thus the follwing two commands are equivalent (‘0x5e’ is the hexadecimal ASCII value of the character ‘^’)

$ echo | sed 'Q42' ; echo $?
42
0

As are the following (‘0x5b’,‘0x5d’ are the hexadecimal ASCII values of ‘[’,‘]’, respectively)

$ echo | sed 'Q42' ; echo $?
42
1

However it is recommended to avoid such special characters due to unexpected edge-cases. For example, the following are not equivalent

$ echo | sed 'Q42' ; echo $?
42
2


5. 9 Multibyte characters and Locale Considerations

GNU

sed -i 's/hello/world/' file.txt
22 processes valid multibyte characters in multibyte locales (e. g.
$ echo | sed 'Q42' ; echo $?
42
15).

The following example uses the Greek letter Capital Sigma (Σ, Unicode code point

$ echo | sed 'Q42' ; echo $?
42
16). In a
$ echo | sed 'Q42' ; echo $?
42
15 locale,
sed -i 's/hello/world/' file.txt
22 correctly processes the Sigma as one character despite it being 2 octets (bytes)

$ echo | sed 'Q42' ; echo $?
42
3

Untuk memaksa

sed -i 's/hello/world/' file.txt
_22 memproses oktet secara terpisah, gunakan lokal
$ echo | sed 'Q42' ; echo $?
42
20 (juga dikenal sebagai lokal
$ echo | sed 'Q42' ; echo $?
42
21)

$ echo | sed 'Q42' ; echo $?
42
4

5. 9. 1 Invalid multibyte characters

sed -i 's/hello/world/' file.txt
22’s regular expressions do not match invalid multibyte sequences in a multibyte locale

In the following examples, the ascii value

$ echo | sed 'Q42' ; echo $?
42
23 is an incomplete multibyte character (shown here as �). The regular expression ‘. ’ does not match it

$ echo | sed 'Q42' ; echo $?
42
5

Similarly, the ’catch-all’ regular expression ‘. *’ does not match the entire line

$ echo | sed 'Q42' ; echo $?
42
6

GNU

sed -i 's/hello/world/' file.txt
22 offers the special
sed -n  '1p ; $p' one.txt two.txt three.txt
77 command to clear the current pattern space regardless of invalid multibyte characters (i. e. it works like
$ echo | sed 'Q42' ; echo $?
42
26 but also removes invalid multibyte characters)

$ echo | sed 'Q42' ; echo $?
42
7

Alternatively, force the

$ echo | sed 'Q42' ; echo $?
42
20 locale to process each octet separately (every octet is a valid character in the
$ echo | sed 'Q42' ; echo $?
42
20 locale)

$ echo | sed 'Q42' ; echo $?
42
8

sed -i 's/hello/world/' file.txt
22’s inability to process invalid multibyte characters can be used to detect such invalid sequences in a file. In the following examples, the
$ echo | sed 'Q42' ; echo $?
42
30 is an invalid multibyte sequence, while
$ echo | sed 'Q42' ; echo $?
42
31 is a valid multibyte sequence (of the Greek Sigma character)

The following

sed -i 's/hello/world/' file.txt
22 program removes all valid characters using
$ echo | sed 'Q42' ; echo $?
42
33. Any content left in the pattern space (the invalid characters) are added to the hold space using the
sed -n  '1p ; $p' one.txt two.txt three.txt
47 command. On the last line (
sed -i 's/hello/world/' file.txt
87), the hold space is retrieved (
sed -n  '1p ; $p' one.txt two.txt three.txt
75), newlines are removed (
$ echo | sed 'Q42' ; echo $?
42
37), and any remaining octets are printed unambiguously (
sed -i 's/hello/world/' file.txt
67). Thus, any invalid multibyte sequences are printed as octal values

$ echo | sed 'Q42' ; echo $?
42
9

With a few more commands,

sed -i 's/hello/world/' file.txt
22 can print the exact line number corresponding to each invalid characters (line 3). These characters can then be removed by forcing the
$ echo | sed 'Q42' ; echo $?
42
20 locale and using octal escape sequences

sed '30,35d' input.txt > output.txt
0

5. 9. 2 Upper/Lower case conversion

GNU

sed -i 's/hello/world/' file.txt
22’s substitute command (
sed -n  '1p ; $p' one.txt two.txt three.txt
67) supports upper/lower case conversions using
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
05,
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
04 codes. These conversions support multibyte characters

sed '30,35d' input.txt > output.txt
1

See

5. 9. 3 Multibyte regexp character classes

In other locales, the sorting sequence is not specified, and ‘[a-d]’ might be equivalent to ‘[abcd]’ or to ‘[aBbCcDd]’, or it might fail to match any character, or the set of characters that it matches might even be erratic. To obtain the traditional interpretation of bracket expressions, you can use the ‘C’ locale by setting the

$ echo | sed 'Q42' ; echo $?
42
45 environment variable to the value ‘C’

sed '30,35d' input.txt > output.txt
2

Their interpretation depends on the

$ echo | sed 'Q42' ; echo $?
42
46 locale; for example, ‘[[. alnum. ]]’ means the character class of numbers and letters in the current locale

TODO. show example of collation

sed '30,35d' input.txt > output.txt
3


6 Advanced sed -i 's/hello/world/' file.txt 22. cycles and buffers


6. 1 How sed -i 's/hello/world/' file.txt 22 Works

sed -i 's/hello/world/' file.txt
22 maintains two data buffers. the active pattern space, and the auxiliary hold space. Both are initially empty

sed -i 's/hello/world/' file.txt
22 operates by performing the following cycle on each line of input. first,
sed -i 's/hello/world/' file.txt
22 reads one line from the input stream, removes any trailing newline, and places it in the pattern space. Then commands are executed; each command can have an address associated to it. addresses are a kind of condition code, and a command is only executed if the condition is verified before the command is to be executed

When the end of the script is reached, unless the -n option is in use, the contents of pattern space are printed out to the output stream, adding back the trailing newline if it was removed. Then the next cycle starts for the next input line

Unless special commands (like ‘D’) are used, the pattern space is deleted between two cycles. The hold space, on the other hand, keeps its data between cycles (see commands ‘h’, ‘H’, ‘x’, ‘g’, ‘G’ to move data between both buffers)


6. 2 Hold dan Pattern Buffer

TODO


6. 3 Multiline techniques - using D,G,H,N,P to process multiple lines

Multiple lines can be processed as one buffer using the

sed -n  '1p ; $p' one.txt two.txt three.txt
39,
sed -n  '1p ; $p' one.txt two.txt three.txt
45,
sed -n  '1p ; $p' one.txt two.txt three.txt
47,
sed -i 's/hello/world/' file.txt
71,
sed -n  '1p ; $p' one.txt two.txt three.txt
57. They are similar to their lowercase counterparts (
sed -i 's/hello/world/' file.txt
36,
sed -n  '1p ; $p' one.txt two.txt three.txt
44,
sed -n  '1p ; $p' one.txt two.txt three.txt
46,
sed -n  '1p ; $p' one.txt two.txt three.txt
52,
sed -i 's/hello/world/' file.txt
37), except that these commands append or subtract data while respecting embedded newlines - allowing adding and removing lines from the pattern and hold spaces

They operate as follows

sed -n  '1p ; $p' one.txt two.txt three.txt
_39

deletes line from the pattern space until the first newline, and restarts the cycle

sed -n  '1p ; $p' one.txt two.txt three.txt
_45

appends line from the hold space to the pattern space, with a newline before it

sed -n  '1p ; $p' one.txt two.txt three.txt
_47

menambahkan baris dari ruang pola ke ruang tunggu, dengan baris baru di depannya

sed -i 's/hello/world/' file.txt
_71

appends line from the input file to the pattern space

sed -n  '1p ; $p' one.txt two.txt three.txt
_57

prints line from the pattern space until the first newline

The following example illustrates the operation of

sed -i 's/hello/world/' file.txt
71 and
sed -n  '1p ; $p' one.txt two.txt three.txt
39 commands

sed '30,35d' input.txt > output.txt
4

  1. sed -i 's/hello/world/' file.txt
    
    22 starts by reading the first line into the pattern space (i. e. ‘1’)
  2. At the beginning of every cycle, the
    sed -i 's/hello/world/' file.txt
    
    71 command appends a newline and the next line to the pattern space (i. e. ‘1’, ‘\n’, ‘2’ in the first cycle)
  3. The
    sed -i 's/hello/world/' file.txt
    
    67 command prints the content of the pattern space unambiguously
  4. The
    sed -n  '1p ; $p' one.txt two.txt three.txt
    
    39 command then removes the content of pattern space up to the first newline (leaving ‘2’ at the end of the first cycle)
  5. At the next cycle the
    sed -i 's/hello/world/' file.txt
    
    71 command appends a newline and the next input line to the pattern space (e. g. ‘2’, ‘\n’, ‘3’)

A common technique to process blocks of text such as paragraphs (instead of line-by-line) is using the following construct

sed '30,35d' input.txt > output.txt
5

  1. The first expression,
    $ echo | sed 'Q42' ; echo $?
    42
    
    74 operates on all non-empty lines, and adds the current line (in the pattern space) to the hold space. On all lines except the last, the pattern space is deleted and the cycle is restarted
  2. The other expressions
    sed -n  '1p ; $p' one.txt two.txt three.txt
    
    75 and
    sed -n  '1p ; $p' one.txt two.txt three.txt
    
    67 are executed only on empty lines (i. e. paragraph separators). The
    sed -n  '1p ; $p' one.txt two.txt three.txt
    
    75 command fetches the accumulated lines from the hold space back to the pattern space. The
    $ echo 1 | sed '\%1%s21232'
    3
    
    $ echo 1 | sed --debug '\%1%s21232'
    SED PROGRAM:
      /1/ s/1/3/
    INPUT:   'STDIN' line 1
    PATTERN: 1
    COMMAND: /1/ s/1/3/
    PATTERN: 3
    END-OF-CYCLE:
    3
    
    66 command then operates on all the text in the paragraph (including the embedded newlines)

The following example demonstrates this technique

sed '30,35d' input.txt > output.txt
6

For more annotated examples, see and


6. 4 Branching and Flow Control

The branching commands

sed -n  '1p ; $p' one.txt two.txt three.txt
82,
sed -n  '1p ; $p' one.txt two.txt three.txt
83, and
sed -n  '1p ; $p' one.txt two.txt three.txt
84 enable changing the flow of
sed -i 's/hello/world/' file.txt
22 programs

By default,

sed -i 's/hello/world/' file.txt
22 reads an input line into the pattern buffer, then continues to processes all commands in order. Commands without addresses affect all lines. Commands with addresses affect only matching lines. See and

sed -i 's/hello/world/' file.txt
22 does not support a typical
$ echo | sed 'Q42' ; echo $?
42
85 construct. Instead, some commands can be used as conditionals or to change the default flow control

sed -i 's/hello/world/' file.txt
_36

delete (clears) the current pattern space, and restart the program cycle without processing the rest of the commands and without printing the pattern space

sed -n  '1p ; $p' one.txt two.txt three.txt
_39

delete the contents of the pattern space up to the first newline, and restart the program cycle without processing the rest of the commands and without printing the pattern space

$ echo | sed 'Q42' ; echo $?
42
88
$ echo | sed 'Q42' ; echo $?
42
89
$ echo | sed 'Q42' ; echo $?
42
90
$ echo | sed 'Q42' ; echo $?
42
91

Addresses and regular expressions can be used as an

$ echo | sed 'Q42' ; echo $?
42
85 conditional. If [addr] matches the current pattern space, execute the command(s). For example. The command
$ echo | sed 'Q42' ; echo $?
42
93 means. if the current pattern matches the regular expression
$ echo | sed 'Q42' ; echo $?
42
94 (a line starting with a hash), then execute the
sed -i 's/hello/world/' file.txt
36 command. delete the line without printing it, and restart the program cycle immediately

sed -n  '1p ; $p' one.txt two.txt three.txt
82

branch unconditionally (that is. always jump to a label, skipping or repeating other commands, without restarting a new cycle). Combined with an address, the branch can be conditionally executed on matched lines

sed -n  '1p ; $p' one.txt two.txt three.txt
83

branch conditionally (that is. jump to a label) only if a

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
66 command has succeeded since the last input line was read or another conditional branch was taken

sed -n  '1p ; $p' one.txt two.txt three.txt
84

similar but opposite to the

sed -n  '1p ; $p' one.txt two.txt three.txt
83 command. branch only if there has been no successful substitutions since the last input line was read

The following two

sed -i 's/hello/world/' file.txt
22 programs are equivalent. The first (contrived) example uses the
sed -n  '1p ; $p' one.txt two.txt three.txt
82 command to skip the
$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
66 command on lines containing ‘1’. The second example uses an address with negation (‘. ’) to perform substitution only on desired lines. The
sed '30,35d' input.txt > output.txt
04 command is still executed on all lines

sed '30,35d' input.txt > output.txt
7

6. 4. 1 Branching and Cycles

The

sed -n  '1p ; $p' one.txt two.txt three.txt
82,
sed -n  '1p ; $p' one.txt two.txt three.txt
83 and
sed -n  '1p ; $p' one.txt two.txt three.txt
84 commands can be followed by a label (typically a single letter). Labels are defined with a colon followed by one or more letters (e. g. ‘. x’). If the label is omitted the branch commands restart the cycle. Note the difference between branching to a label and restarting the cycle. when a cycle is restarted,
sed -i 's/hello/world/' file.txt
22 first prints the current content of the pattern space, then reads the next input line into the pattern space; Jumping to a label (even if it is at the beginning of the program) does not print the pattern space and does not read the next input line

The following program is a no-op. The

sed -n  '1p ; $p' one.txt two.txt three.txt
82 command (the only command in the program) does not have a label, and thus simply restarts the cycle. On each cycle, the pattern space is printed and the next input line is read

The following example is an infinite-loop - it doesn’t terminate and doesn’t print anything. The

sed -n  '1p ; $p' one.txt two.txt three.txt
82 command jumps to the ‘x’ label, and a new cycle is never started

sed '30,35d' input.txt > output.txt
8

Branching is often complemented with the

sed -n  '1p ; $p' one.txt two.txt three.txt
52 or
sed -i 's/hello/world/' file.txt
71 commands. both commands read the next input line into the pattern space without waiting for the cycle to restart. Before reading the next input line,
sed -n  '1p ; $p' one.txt two.txt three.txt
52 prints the current pattern space then empties it, while
sed -i 's/hello/world/' file.txt
71 appends a newline and the next input line to the pattern space

Consider the following two examples

sed '30,35d' input.txt > output.txt
9

  • Both examples do not inf-loop, despite never starting a new cycle
  • In the first example, the
    sed -n  '1p ; $p' one.txt two.txt three.txt
    
    52 commands first prints the content of the pattern space, empties the pattern space then reads the next input line
  • In the second example, the
    sed -i 's/hello/world/' file.txt
    
    71 commands appends the next input line to the pattern space (with a newline). Lines are accumulated in the pattern space until there are no more input lines to read, then the
    sed -i 's/hello/world/' file.txt
    
    71 command terminates the
    sed -i 's/hello/world/' file.txt
    
    22 program. When the program terminates, the end-of-cycle actions are performed, and the entire pattern space is printed
  • The second example requires GNU
    sed -i 's/hello/world/' file.txt
    
    22, because it uses the non-POSIX-standard behavior of
    sed -i 's/hello/world/' file.txt
    
    71. See the “
    sed -i 's/hello/world/' file.txt
    
    71 command on the last line” paragraph in
  • To further examine the difference between the two examples, try the following commands

    sed 's/hello/world/' input.txt > output.txt
    sed 's/hello/world/' < input.txt > output.txt
    cat input.txt | sed 's/hello/world/' - > output.txt
    
    00

6. 4. 2 Branching example. joining lines

As a real-world example of using branching, consider the case of quoted-printable files, typically used to encode email messages. In these files long lines are split and marked with a soft line break consisting of a single ‘=’ character at the end of the line

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
01

The following program uses an address match ‘/=$/’ as a conditional. If the current pattern space ends with a ‘=’, it reads the next input line using

sed -i 's/hello/world/' file.txt
71, replaces all ‘=’ characters which are followed by a newline, and unconditionally branches (
sed -n  '1p ; $p' one.txt two.txt three.txt
82) to the beginning of the program without restarting a new cycle. If the pattern space does not ends with ‘=’, the default action is performed. the pattern space is printed and a new cycle is started

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
02

Here’s an alternative program with a slightly different approach. On all lines except the last,

sed -i 's/hello/world/' file.txt
71 appends the line to the pattern space. A substitution command then removes soft line breaks (‘=’ at the end of a line, i. e. followed by a newline) by replacing them with an empty string. if the substitution was successful (meaning the pattern space contained a line which should be joined), The conditional branch command
sed -n  '1p ; $p' one.txt two.txt three.txt
83 jumps to the beginning of the program without completing or restarting the cycle. If the substitution failed (meaning there were no soft line breaks), The
sed -n  '1p ; $p' one.txt two.txt three.txt
83 command will not branch. Then,
sed -n  '1p ; $p' one.txt two.txt three.txt
57 will print the pattern space content until the first newline, and
sed -n  '1p ; $p' one.txt two.txt three.txt
39 will delete the pattern space content until the first new line. (To learn more about
sed -i 's/hello/world/' file.txt
71,
sed -n  '1p ; $p' one.txt two.txt three.txt
57 and
sed -n  '1p ; $p' one.txt two.txt three.txt
39 commands see )

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
03

For more line-joining examples see


7 Some Sample Scripts

Here are some

sed -i 's/hello/world/' file.txt
22 scripts to guide you in the art of mastering
sed -i 's/hello/world/' file.txt
22


7. 1 Joining lines

This section uses

sed -i 's/hello/world/' file.txt
71,
sed -n  '1p ; $p' one.txt two.txt three.txt
39 and
sed -n  '1p ; $p' one.txt two.txt three.txt
57 commands to process multiple lines, and the
sed -n  '1p ; $p' one.txt two.txt three.txt
82 and
sed -n  '1p ; $p' one.txt two.txt three.txt
83 commands for branching. See and

Join specific lines (e. g. if lines 2 and 3 need to be joined)

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
04

Join backslash-continued lines

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
05

Join lines that start with whitespace (e. g SMTP headers)

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
06


7. 2 Centering Lines

This script centers all lines of a file on a 80 columns width. To change that width, the number in

sed '30,35d' input.txt > output.txt
39 must be replaced, and the number of added spaces also must be changed

Note how the buffer commands are used to separate parts in the regular expressions to be matched—this is a common technique

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
07
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
08
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
09
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
10
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
11
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
12


7. 3 Increment a Number

This script is one of a few that demonstrate how to do arithmetic in

sed -i 's/hello/world/' file.txt
22. This is indeed possible, but must be done manually

To increment one number you just add 1 to last digit, replacing it by the following digit. There is one exception. when the digit is a nine the previous digits must be also incremented until you don’t have a nine

This solution by Bruno Haible is very clever and smart because it uses a single buffer; if you don’t have this limitation, the algorithm used in , is faster. It works by replacing trailing nines with an underscore, then using multiple

sed -n  '1p ; $p' one.txt two.txt three.txt
67 commands to increment the last digit, and then again substituting underscores with zeros

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
13
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
14
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
15
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
16
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
17


7. 4 Rename Files to Lower Case

This is a pretty strange use of

sed -i 's/hello/world/' file.txt
22. We transform text, and transform it to be shell commands, then just feed them to shell. Don’t worry, even worse hacks are done when using
sed -i 's/hello/world/' file.txt
22; I have seen a script converting the output of
sed '30,35d' input.txt > output.txt
44 into a
sed '30,35d' input.txt > output.txt
45 program

The main body of this is the

sed -i 's/hello/world/' file.txt
22 script, which remaps the name from lower to upper (or vice-versa) and even checks out if the remapped name is the same as the original name. Note how the script is parameterized using shell variables and proper quoting

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
18
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
19
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
20
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
21
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
22
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
23
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
24
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
25
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
26
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
27
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
28
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
29
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
30
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
31
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
32
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
33
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
34
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
35
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
36
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
37
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
38
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
39
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
40


7. 5 Print sed '30,35d' input.txt > output.txt 47 Environment

This script strips the definition of the shell functions from the output of the

sed '30,35d' input.txt > output.txt
48 Bourne-shell command

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
41
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
42
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
43
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
44
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
45
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
46
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
47


7. 6 Reverse Characters of Lines

This script can be used to reverse the position of characters in lines. The technique moves two characters at a time, hence it is faster than more intuitive implementations

Note the

sed '30,35d' input.txt > output.txt
49 command before the definition of the label. This is often needed to reset the flag that is tested by the
sed -n  '1p ; $p' one.txt two.txt three.txt
83 command

Pembaca yang imajinatif akan menemukan kegunaan dari skrip ini. An example is reversing the output of

sed '30,35d' input.txt > output.txt
51

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
48
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
49
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
50
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
51


7. 7 Text search across multiple lines

This section uses

sed -i 's/hello/world/' file.txt
71 and
sed -n  '1p ; $p' one.txt two.txt three.txt
39 commands to search for consecutive words spanning multiple lines. See

Contoh-contoh ini berurusan dengan menemukan kemunculan kata yang berlipat ganda dalam sebuah dokumen

Finding doubled words in a single line is easy using GNU

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
87 and similarly with GNU
sed -i 's/hello/world/' file.txt
22

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
52

  • The regular expression ‘\b\w+\s+’ searches for word-boundary (‘\b’), followed by one-or-more word-characters (‘\w+’), followed by whitespace (‘\s+’). See
  • Adding parentheses around the ‘(\w+)’ expression creates a subexpression. The regular expression pattern ‘(PATTERN)\s+\1’ defines a subexpression (in the parentheses) followed by a back-reference, separated by whitespace. A successful match means the PATTERN was repeated twice in succession. See
  • The word-boundery expression (‘\b’) at both ends ensures partial words are not matched (e. g. ‘the then’ is not a desired match)
  • Opsi -E mengaktifkan sintaks ekspresi reguler yang diperluas, mengurangi kebutuhan untuk menambahkan garis miring terbalik sebelum tanda kurung. See

When the doubled word span two lines the above regular expression will not find them as

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
87 and
sed -i 's/hello/world/' file.txt
22 operate line-by-line

By using

sed -i 's/hello/world/' file.txt
71 and
sed -n  '1p ; $p' one.txt two.txt three.txt
39 commands,
sed -i 's/hello/world/' file.txt
22 can apply regular expressions on multiple lines (that is, multiple lines are stored in the pattern space, and the regular expression works on it)

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
53

  • The
    sed -i 's/hello/world/' file.txt
    
    71 command appends the next line to the pattern space (thus ensuring it contains two consecutive lines in every cycle)
  • The regular expression uses ‘\s+’ for word separator which matches both spaces and newlines
  • The regular expression matches, the entire pattern space is printed with
    sed -i 's/hello/world/' file.txt
    
    37. No lines are printed by default due to the -n option
  • The
    sed -n  '1p ; $p' one.txt two.txt three.txt
    
    39 removes the first line from the pattern space (up until the first newline), readying it for the next cycle

See the GNU

sed '30,35d' input.txt > output.txt
64 manual for an alternative solution using
sed '30,35d' input.txt > output.txt
65 and
sed '30,35d' input.txt > output.txt
66 at https. //gnu. org/s/coreutils/manual/html_node/Squeezing-and-deleting. html


7. 8 Line length adjustment

This section uses

sed -i 's/hello/world/' file.txt
71 and
sed -n  '1p ; $p' one.txt two.txt three.txt
39 commands to search for consecutive words spanning multiple lines, and the
sed -n  '1p ; $p' one.txt two.txt three.txt
82 command for branching. See and

This (somewhat contrived) example deal with formatting and wrapping lines of text of the following input file

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
54

The following sed program wraps lines at 40 characters

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
55

The wrapped output

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
56


7. 9 Reverse Lines of Files

This one begins a series of totally useless (yet interesting) scripts emulating various Unix commands. This, in particular, is a

sed '30,35d' input.txt > output.txt
70 workalike

Note that on implementations other than GNU

sed -i 's/hello/world/' file.txt
22 this script might easily overflow internal buffers

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
57
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
58
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
59
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
60


7. 10 Numbering Lines

This script replaces ‘cat -n’; in fact it formats its output exactly like GNU

sed '30,35d' input.txt > output.txt
72 does

Of course this is completely useless and for two reasons. first, because somebody else did it in C, second, because the following Bourne-shell script could be used for the same purpose and would be much faster

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
61

It uses

sed -i 's/hello/world/' file.txt
22 to print the line number, then groups lines two by two using
sed -i 's/hello/world/' file.txt
71. Of course, this script does not teach as much as the one presented below

The algorithm used for incrementing uses both buffers, so the line is printed as soon as possible and then discarded. The number is split so that changing digits go in a buffer and unchanged ones go in the other; the changed digits are modified in a single step (using a

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
83 command). The line number for the next line is then composed and stored in the hold space, to be used in the next iteration

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
62
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
63
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
64
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
65
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
66
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
67
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
68
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
69
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
70


7. 11 Numbering Non-blank Lines

Emulating ‘cat -b’ is almost the same as ‘cat -n’—we only have to select which lines are to be numbered and which are not

The part that is common to this script and the previous one is not commented to show how important it is to comment

sed -i 's/hello/world/' file.txt
22 scripts properly

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
62
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
72
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
73


7. 12 Counting Characters

This script shows another way to do arithmetic with

sed -i 's/hello/world/' file.txt
22. In this case we have to add possibly large numbers, so implementing this by successive increments would not be feasible (and possibly even more complicated to contrive than this script)

The approach is to map numbers to letters, kind of an abacus implemented with

sed -i 's/hello/world/' file.txt
22. ‘a’s are units, ‘b’s are tens and so on. we simply add the number of characters on the current line as units, and then propagate the carry to tens, hundreds, and so on

As usual, running totals are kept in hold space

On the last line, we convert the abacus form back to decimal. For the sake of variety, this is done with a loop rather than with some 80

sed -n  '1p ; $p' one.txt two.txt three.txt
67 commands. first we convert units, removing ‘a’s from the number; then we rotate letters so that tens become ‘a’s, and so on until no more letters remain

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
62
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
75
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
76
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
77
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
78
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
79
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
80


7. 13 Counting Words

This script is almost the same as the previous one, once each of the words on the line is converted to a single ‘a’ (in the previous script each letter was changed to an ‘a’)

It is interesting that real

sed '30,35d' input.txt > output.txt
80 programs have optimized loops for ‘wc -c’, so they are much slower at counting words rather than characters. This script’s bottleneck, instead, is arithmetic, and hence the word-counting one is faster (it has to manage smaller numbers)

Again, the common parts are not commented to show the importance of commenting

sed -i 's/hello/world/' file.txt
22 scripts

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
62
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
82
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
83
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
84


7. 14 Counting Lines

No strange things are done now, because

sed -i 's/hello/world/' file.txt
22 gives us ‘wc -l’ functionality for free. Look


7. 15 Printing the First Lines

This script is probably the simplest useful

sed -i 's/hello/world/' file.txt
22 script. It displays the first 10 lines of input; the number of displayed lines is right before the
sed -n  '1p ; $p' one.txt two.txt three.txt
00 command


7. 16 Printing the Last Lines

Printing the last n lines rather than the first is more complex but indeed possible. n is encoded in the second line, before the bang character

This script is similar to the

sed '30,35d' input.txt > output.txt
70 script in that it keeps the final output in the hold space and prints it at the end

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
62
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
86

Mainly, the scripts keeps a window of 10 lines and slides it by adding a line and deleting the oldest (the substitution command on the second line works like a

sed -n  '1p ; $p' one.txt two.txt three.txt
39 command but does not restart the loop)

The “sliding window” technique is a very powerful way to write efficient and complex

sed -i 's/hello/world/' file.txt
22 scripts, because commands like
sed -n  '1p ; $p' one.txt two.txt three.txt
57 would require a lot of work if implemented manually

To introduce the technique, which is fully demonstrated in the rest of this chapter and is based on the

sed -i 's/hello/world/' file.txt
71,
sed -n  '1p ; $p' one.txt two.txt three.txt
57 and
sed -n  '1p ; $p' one.txt two.txt three.txt
39 commands, here is an implementation of
sed '30,35d' input.txt > output.txt
92 using a simple “sliding window. ”

This looks complicated but in fact the working is the same as the last script. after we have kicked in the appropriate number of lines, however, we stop using the hold space to keep inter-line state, and instead use

sed -i 's/hello/world/' file.txt
71 and
sed -n  '1p ; $p' one.txt two.txt three.txt
39 to slide pattern space by one line

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
07
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
88

Note how the first, second and fourth line are inactive after the first ten lines of input. After that, all the script does is. exiting on the last line of input, appending the next input line to pattern space, and removing the first line


7. 17 Make Duplicate Lines Unique

This is an example of the art of using the

sed -i 's/hello/world/' file.txt
71,
sed -n  '1p ; $p' one.txt two.txt three.txt
57 and
sed -n  '1p ; $p' one.txt two.txt three.txt
39 commands, probably the most difficult to master

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
89
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
90
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
91
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
92

As you can see, we maintain a 2-line window using

sed -n  '1p ; $p' one.txt two.txt three.txt
57 and
sed -n  '1p ; $p' one.txt two.txt three.txt
39. This technique is often used in advanced
sed -i 's/hello/world/' file.txt
22 scripts


7. 18 Print Duplicated Lines of Input

This script prints only duplicated lines, like ‘uniq -d’

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
62
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
94
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
95
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
96
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
97


7. 19 Remove All Duplicated Lines

This script prints only unique lines, like ‘uniq -u’

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
07
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
99
sed -i 's/hello/world/' file.txt
00
sed -i 's/hello/world/' file.txt
01
sed -i 's/hello/world/' file.txt
02


7. 20 Squeezing Blank Lines

As a final example, here are three scripts, of increasing complexity and speed, that implement the same function as ‘cat -s’, that is squeezing blank lines

The first leaves a blank line at the beginning and end if there are some already

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
07
sed -i 's/hello/world/' file.txt
04
sed -i 's/hello/world/' file.txt
05

This one is a bit more complex and removes all empty lines at the beginning. It does leave a single blank line at end if one was there

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
07
sed -i 's/hello/world/' file.txt
07
sed -i 's/hello/world/' file.txt
08

This removes leading and trailing blank lines. It is also the fastest. Note that loops are completely done with

sed -n  '1p ; $p' one.txt two.txt three.txt
52 and
sed -n  '1p ; $p' one.txt two.txt three.txt
82, without relying on
sed -i 's/hello/world/' file.txt
22 to restart the script automatically at the end of a line

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
62
sed -i 's/hello/world/' file.txt
10
sed -i 's/hello/world/' file.txt
11
sed -i 's/hello/world/' file.txt
12
sed -i 's/hello/world/' file.txt
13
sed -i 's/hello/world/' file.txt
14


8 GNU sed -i 's/hello/world/' file.txt 22’s Limitations and Non-limitations

For those who want to write portable

sed -i 's/hello/world/' file.txt
22 scripts, be aware that some implementations have been known to limit line lengths (for the pattern and hold spaces) to be no more than 4000 bytes. The POSIX standard specifies that conforming
sed -i 's/hello/world/' file.txt
22 implementations shall support at least 8192 byte line lengths. GNU
sed -i 's/hello/world/' file.txt
22 has no built-in limit on line length; as long as it can
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
008 more (virtual) memory, you can feed or construct lines as long as you like

However, recursion is used to handle subpatterns and indefinite repetition. This means that the available stack space may limit the size of the buffer that can be processed by certain patterns


9 Other Resources for Learning About sed -i 's/hello/world/' file.txt 22

For up to date information about GNU

sed -i 's/hello/world/' file.txt
22 please visit https. //www. gnu. org/software/sed/

Send general questions and suggestions to sed-devel@gnu. org. Visit the mailing list archives for past discussions at https. //lists. gnu. org/archive/html/sed-devel/

The following resources provide information about

sed -i 's/hello/world/' file.txt
22 (both GNU
sed -i 's/hello/world/' file.txt
22 and other variations). Note these not maintained by GNU
sed -i 's/hello/world/' file.txt
22 developers


10 Reporting Bugs

Email bug reports to bug-sed@gnu. org. Selain itu, harap sertakan keluaran 'sed --version' di badan laporan Anda jika memungkinkan

Please do not send a bug report like this

sed -i 's/hello/world/' file.txt
15

If GNU

sed -i 's/hello/world/' file.txt
22 doesn’t configure your favorite package, take a few extra minutes to identify the specific problem and make a stand-alone test case. Unlike other programs such as C compilers, making such test cases for
sed -i 's/hello/world/' file.txt
22 is quite simple

A stand-alone test case includes all the data necessary to perform the test, and the specific invocation of

sed -i 's/hello/world/' file.txt
22 that causes the problem. Semakin kecil test case yang berdiri sendiri, semakin baik. A test case should not involve something as far removed from
sed -i 's/hello/world/' file.txt
22 as “try to configure frobme-1. 3. 4”. Yes, that is in principle enough information to look for the bug, but that is not a very practical prospect

Here are a few commonly reported bugs that are not bugs

sed -i 's/hello/world/' file.txt
71 command on the last line

Most versions of

sed -i 's/hello/world/' file.txt
22 exit without printing anything when the
sed -i 's/hello/world/' file.txt
71 command is issued on the last line of a file. GNU
sed -i 's/hello/world/' file.txt
22 prints pattern space before exiting unless of course the
sed -i 's/hello/world/' file.txt
45 command switch has been specified. This choice is by design

Default behavior (gnu extension, non-POSIX conforming)

To force POSIX-conforming behavior

sed -i 's/hello/world/' file.txt
16

For example, the behavior of

would depend on whether foo has an even or an odd number of lines. Or, when writing a script to read the next few lines following a pattern match, traditional implementations of

sed -i 's/hello/world/' file.txt
22 would force you to write something like

sed -i 's/hello/world/' file.txt
17

instead of just

sed -i 's/hello/world/' file.txt
18

In any case, the simplest workaround is to use

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
024 in scripts that rely on the traditional behavior, or to set the
sed -i 's/hello/world/' file.txt
72 variable to a non-empty value

Regex syntax clashes (problems with backslashes)

sed -i 's/hello/world/' file.txt
22 uses the POSIX basic regular expression syntax. According to the standard, the meaning of some escape sequences is undefined in this syntax; notable in the case of
sed -i 's/hello/world/' file.txt
22 are
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
11,
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
23,
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
25,
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
56,
sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
57,
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
91,
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
92,
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
87,
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
88,
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
85, and
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
86

As in all GNU programs that use POSIX basic regular expressions,

sed -i 's/hello/world/' file.txt
22 interprets these escape sequences as special characters. So,
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
040 matches one or more occurrences of ‘x’.
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
041 matches either ‘abc’ or ‘def’

This syntax may cause problems when running scripts written for other

sed -i 's/hello/world/' file.txt
22s. Some
sed -i 's/hello/world/' file.txt
22 programs have been written with the assumption that
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
11 and
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
23 match the literal characters
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
046 and
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
047. Such scripts must be modified by removing the spurious backslashes if they are to be used with modern implementations of
sed -i 's/hello/world/' file.txt
22, like GNU
sed -i 's/hello/world/' file.txt
22

On the other hand, some scripts use s. abc\. def. g to remove occurrences of either

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
050 or
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
051. While this worked until
sed -i 's/hello/world/' file.txt
22 4. 0. x, newer versions interpret this as removing the string
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
053. This is again undefined behavior according to POSIX, and this interpretation is arguably more robust. older
sed -i 's/hello/world/' file.txt
22s, for example, required that the regex matcher parsed
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
055 as
sed -n  '1p ; $p' one.txt two.txt three.txt
94 in the common case of escaping a slash, which is again undefined behavior; the new behavior avoids this, and this is good because the regex matcher is only partially under our control

In addition, this version of

sed -i 's/hello/world/' file.txt
22 supports several escape characters (some of which are multi-character) to insert non-printable characters in scripts (
$ echo | sed 'Q42' ; echo $?
42
02,
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
059,
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
060,
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
061,
$ echo | sed 'Q42' ; echo $?
42
05,
# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
53,
$ echo | sed 'Q42' ; echo $?
42
07,
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
065). These can cause similar problems with scripts written for other
sed -i 's/hello/world/' file.txt
22s

-i clobbers read-only files

In short, ‘sed -i’ will let you delete the contents of a read-only file, and in general the -i option (see ) lets you clobber protected files. This is not a bug, but rather a consequence of how the Unix file system works

The permissions on a file say what can happen to the data in that file, while the permissions on a directory say what can happen to the list of files in that directory. ‘sed -i’ will not ever open for writing a file that is already on disk. Rather, it will work on a temporary file that is finally renamed to the original name. if you rename or delete files, you’re actually modifying the contents of the directory, so the operation depends on the permissions of the directory, not of the file. For this same reason,

sed -i 's/hello/world/' file.txt
22 does not let you use -i on a writable file in a read-only directory, and will break hard or symbolic links when -i is used on such a file

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
068 does not work (gives an error)

There is no line 0. 0 is a special address that is only used to treat addresses like

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
069 as active when the script starts. if you write
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
070 and the first line includes the word ‘abc’, then that match would be ignored because address ranges must span at least two lines (barring the end of the file); but what you probably wanted is to delete every line up to the first one including ‘abc’, and this is obtained with
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
071

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
072 is case insensitive

You are encountering problems with locales. POSIX mandates that

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
072 uses the current locale’s collation order – in C parlance, that means using
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
074 instead of
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
075. Some locales have a case-insensitive collation order, others don’t

Another problem is that

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
072 tries to use collation symbols. This only happens if you are on the GNU system, using GNU libc’s regular expression matcher instead of compiling the one supplied with GNU sed. In a Danish locale, for example, the regular expression
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
077 matches the string ‘aa’, because this is a single collating symbol that comes after ‘a’ and before ‘b’; ‘ll’ behaves similarly in Spanish locales, or ‘ij’ in Dutch locales

To work around these problems, which may cause bugs in shell scripts, set the

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
078 and
$ echo | sed 'Q42' ; echo $?
42
46 environment variables to ‘C’

$ echo | sed 'Q42' ; echo $?
42
26 does not clear pattern space

Ini terjadi jika aliran input Anda menyertakan urutan multibyte yang tidak valid. POSIX mandates that such sequences are not matched by ‘. ’, so that ‘s/. *//’ will not clear pattern space as you would expect. In fact, there is no way to clear sed’s buffers in the middle of the script in most multibyte locales (including UTF-8 locales). For this reason, GNU

sed -i 's/hello/world/' file.txt
22 provides a ‘z’ command (for ‘zap’) as an extension

To work around these problems, which may cause bugs in shell scripts, set the

sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
078 and
$ echo | sed 'Q42' ; echo $?
42
46 environment variables to ‘C’


Appendix A GNU Free Documentation License

Version 1. 3, 3 November 2008

sed -i 's/hello/world/' file.txt
19

  1. PREAMBLE

    The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom. to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others

    This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software

    We have designed this License in order to use it for manuals for free software, because free software needs free documentation. a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference

  2. APPLICABILITY AND DEFINITIONS

    This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law

    A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language

    A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics. ) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them

    The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none

    The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words

    A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. Format gambar tidak Transparan jika digunakan untuk sejumlah besar teks. Salinan yang tidak "Transparan" disebut "Buram"

    Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only

    The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text

    The “publisher” means any person or entity that distributes copies of the Document to the public

    A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”. ) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition

    The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties. any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License

  3. VERBATIM COPYING

    You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3

    You may also lend copies, under the same conditions stated above, and you may publicly display copies

  4. COPYING IN QUANTITY

    If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts. Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects

    If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages

    If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public

    It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document

  5. MODIFICATIONS

    You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version

    1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission
    2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement
    3. State on the Title page the name of the publisher of the Modified Version, as the publisher
    4. Preserve all the copyright notices of the Document
    5. Tambahkan pemberitahuan hak cipta yang sesuai untuk modifikasi Anda di samping pemberitahuan hak cipta lainnya
    6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below
    7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice
    8. Include an unaltered copy of this License
    9. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence
    10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission
    11. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein
    12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles
    13. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version
    14. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section
    15. Preserve any Warranty Disclaimers

    If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. Untuk melakukannya, tambahkan judulnya ke daftar Bagian Invarian dalam pemberitahuan lisensi Versi Modifikasi. These titles must be distinct from any other section titles

    Anda dapat menambahkan bagian Berjudul "Pengesahan", asalkan tidak berisi apa-apa selain pengesahan Versi Modifikasi Anda oleh berbagai pihak—misalnya, pernyataan tinjauan sejawat atau bahwa teks tersebut telah disetujui oleh suatu organisasi sebagai definisi otoritatif dari suatu standar

    You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one

    The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version

  6. COMBINING DOCUMENTS

    You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers

    The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work

    In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements. ”

  7. COLLECTIONS OF DOCUMENTS

    You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects

    You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document

  8. AGGREGATION WITH INDEPENDENT WORKS

    A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document

    If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate

  9. TRANSLATION

    Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail

    If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title

  10. TERMINATION

    You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License

    However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation

    Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice

    Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it

  11. FUTURE REVISIONS OF THIS LICENSE

    The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See https. //www. gnu. org/copyleft/

    Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Document

  12. RELICENSING

    “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A “Massive Multiauthor Collaboration” (or “MMC”) contained in the site means any set of copyrightable works thus published on the MMC site

    “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3. 0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization

    “Incorporate” means to publish or republish a Document, in whole or in part, as part of another Document

    An MMC is “eligible for relicensing” if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008

    The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing

ADDENDUM. How to use this License for your documents

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page

sed -i 's/hello/world/' file.txt
20

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with…Texts. ” line with this

sed -i 's/hello/world/' file.txt
_21

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software


Concept Index

This is a general index of all issues discussed in this manual, with the exception of the

sed -i 's/hello/world/' file.txt
22 commands and command-line options

How to remove last word of string in PHP?

Answer. Use the rtrim() Function You can simply use the rtrim() function to remove the last character from a string.

How to remove a word from a string PHP?

Answer. Use the PHP str_replace() function You can use the PHP str_replace() function to replace all the occurrences of a word within a string.

How to remove regex from string in PHP?

$string = str_replace(' ', '-', $string); // Removes special chars. $string = preg_replace('/[^A-Za-z0-9\-]/', '', $string);

How to truncate string in PHP?

The ftruncate() function in PHP is an inbuilt function which is used to truncate(shorten) an open file to the specified length. The file and the new size of the file are sent as parameters to the ftruncate() function and it returns True on success and False on Failure.