GNU/Linux >> Belajar Linux >  >> Linux

Perbedaan Antara Sed Di Mac Osx Dan Sed "standar" Lainnya?

Saya mengalami beberapa masalah dalam menggunakan jawaban yang disediakan di situs ini untuk pertanyaan tentang perintah sed untuk mengganti baris kosong dengan dua baris konten lainnya, dan itu muncul jika perintah sed di Mac OS (10.6.7 untuk saya ) berbeda. Saya rasa tidak, tetapi saya bertanya-tanya apakah orang lain di situs ini berpikiran berbeda.

Jawaban yang Diterima:

Perilaku utilitas shell memang berbeda dalam cara kecil antara varian unix. Ada banyak varian unix, dengan sejarah yang kompleks. Ada upaya standarisasi seperti standar POSIX dan supersetnya spesifikasi UNIX Tunggal. Sebagian besar sistem saat ini menerapkan POSIX:2001, juga dikenal sebagai Spesifikasi UNIX Tunggal versi 3, dengan sedikit penyimpangan dan banyak ekstensi. Spesifikasi Single Unix bukanlah tutorial, tetapi versi 3 dapat dibaca jika Anda sudah memiliki gambaran tentang apa yang dilakukan suatu perintah. Anda dapat berkonsultasi dengannya untuk mengetahui apakah beberapa fitur standar atau ekstensi dari sistem tertentu.

Mayoritas pengguna unix menggunakan Linux dan belum pernah menggunakan varian lain. Linux hadir dengan utilitas GNU, yang seringkali memiliki banyak ekstensi standar. Jadi, Anda akan menemukan cukup banyak kode di luar sana yang berfungsi di Linux tetapi tidak di unix lain, karena bergantung pada ekstensi tersebut.

Mengenai sed, lihat spesifikasi sed Single Unix untuk mengetahui minimum yang harus didukung oleh setiap sistem, halaman manual pada sistem Anda untuk apa yang didukung oleh implementasi Anda, dan manual sed GNU untuk apa yang digunakan kebanyakan orang di luar sana.

Salah satu ekstensi tidak standar di GNU sed mendukung banyak perintah yang dijalankan bersama. Misalnya, program GNU sed ini mencetak semua baris yang berisi a , tetapi mengubah b ke c pertama:

sed -ne '/a/ {s/b/c/g; p}'

{ dan } sebenarnya adalah perintah yang terpisah, jadi untuk portabilitas penuh, Anda perlu menentukannya baik pada baris terpisah (dalam file) atau di -e terpisah argumen (pada baris perintah). Tidak adanya pemisah perintah setelah { dan penggunaan ; sebagai pemisah perintah adalah ekstensi umum. Tidak adanya pemisah perintah sebelum } adalah ekstensi yang kurang umum. Ini sesuai standar:

sed -n -e '/a/ {' -e 's/b/c/g' -e p -e '}'

Ini tidak standar tetapi diterima secara umum:

sed -ne '/a/ { s/b/c/g; p; }'

Ekstensi lain yang tidak standar tetapi umum adalah penggunaan \n berarti baris baru dalam s teks pengganti (penggunaan dalam regexp adalah standar). Metode portabel adalah memasukkan garis miring terbalik-baris baru dalam skrip sed. Ekstensi umum lainnya adalah \+ , \? dan \| di regexps berarti satu atau lebih, paling banyak satu dan bergantian; ekspresi reguler dasar portabel tidak memiliki semua ini. Misalnya, perintah pertama adalah cara non-portabel untuk mengganti urutan spasi putih yang bersebelahan dengan baris baru; perintah kedua setara dengan standar.

sed -e 's/ \+/\n/'
sed -e 's/  */\
/'

Linux
  1. Perbedaan sub-kulit antara bash dan ksh

  2. perbedaan linux antara sudo crontab -e dan hanya crontab -e

  3. Apa perbedaan antara &> dan >&di bash?

  1. Perbedaan antara cp -r dan cp -R (perintah salin)

  2. Perbedaan antara 'man ls' dan 'ls --help'?

  3. Salin-tempel antara tamu Hyper-V dan tuan rumah

  1. Perintah Sed Linux:Penggunaan dan Contoh

  2. Perbedaan Antara Editor Teks Vi Dan Vim Dijelaskan

  3. Perbedaan Antara ' Dan ” Di Command Line (bash)??