Apa yang dilakukan sed-i '1d'?

28

Saya mengerti itu sedadalah perintah untuk memanipulasi file teks.

Dari Googling saya, sepertinya -iberarti melakukan operasi pada file itu sendiri, apakah ini benar?

Bagaimana dengan '1d'?

Jérôme Verstrynge
sumber

Jawaban:

43

Di sed:

  • -i Opsi akan mengedit file input di tempat

  • '1d' akan menghapus baris pertama dari file input

Contoh:

% cat file.txt 
foo
bar

% sed -i '1d' file.txt 

% cat file.txt        
bar

Perhatikan bahwa, sebagian besar waktu adalah ide yang baik untuk mengambil cadangan saat menggunakan -iopsi sehingga Anda memiliki cadangan file asli jika terjadi perubahan yang tidak terduga.

Misalnya, jika Anda melakukannya:

sed -i.orig '1d' file.txt 

file asli akan disimpan file.txt.origdan file yang dimodifikasi akan disimpan file.txt.

heemayl
sumber
4
Anda juga dapat melakukan "dry run" tanpa -imelihat apa yang terjadi terlebih dahulu, kemudian gunakan -iuntuk benar-benar mengubah file.
Baard Kopperud
15

1. a)

sed '1d' file.txt

Mencetak isi file.txt; tidak termasuk baris pertama; ke output standar.


2. a)

sed -i    '1d' file.txt # GNU, NetBSD, OpenBSD
sed -i '' '1d' file.txt # FreeBSD, macOS

Mencetak isi file.txt; tidak termasuk baris pertama; kembali ke file.txt; menimpa yang asli.


2. b)

sed -i.back '1d' file.txt

Membuat cadangan asli (as file.txt.back), sebelum melakukan perubahan. Kecuali dengan FreeBSD sed, sufiks (di sini .back) harus dilampirkan pada -iopsi (dalam argumen yang sama, tidak ada spasi di antara -idan .back).


3. a)

sed '2d' file.txt

Mencetak isi file.txt; tidak termasuk baris kedua; ke output standar.
(Menentukan nomor apa pun akan menghapus baris yang sesuai)

Juga kompatibel dengan -ibendera.


3. b)

sed '1!d' file.txt

Mencetak isi file.txt; tidak termasuk semua kecuali baris pertama; ke output standar.
(Dengan kata lain; hanya baris pertama yang dicetak).

Juga kompatibel dengan -ibendera.


3. c)

sed '$d' file.txt

Mencetak isi file.txt; tidak termasuk baris terakhir; ke output standar.

Juga kompatibel dengan -ibendera.

suara-suara
sumber
FYI: Versi BSD (yaitu standar macOS de facto) biasanya tidak akan bekerja sama kecuali jika Anda membuat cadangan (2. b), atau menggunakan metode pintas cadangan (2. c). Versi GNU tidak akan meminta Anda untuk ini. Ini akan mengedit secara destruktif, dan menimpa file yang ada tanpa ragu-ragu.
Suara
4

Di sed -hmiliki:

  -i[SUFFIX], --in-place[=SUFFIX]
             edit files in place (makes backup if SUFFIX supplied)

dan 'melakukan operasi pada file itu sendiri.' itu mutlak.

Dan manberkata: 'Sed adalah editor aliran. Editor aliran digunakan untuk melakukan transformasi teks dasar pada aliran input (file atau input dari pipa). '

sebagai pertanyaan anda,

sed -i '1d' file_name

berarti: menghapus baris pertama dalam file "file_name"di tempat dan cadangan ke file. (Sama seperti mengedit file dan menghapus baris pertama secara langsung.)

Se ven
sumber