Cara menggunakan GNU sed di Mac OS 10.10+, 'brew install --default-names' tidak lagi didukung

95

Di bawah Mac OS 10.10.3, saya menginstal gnu-sed dengan mengetik:

brew install gnu-sed --default-names

Ketika saya mengetiknya lagi, saya mendapatkan pesan:

gnu-sed-4.2.2 sudah terpasang

Akan tetapi, bahkan setelah me-reboot sistem dan memulai ulang Terminal, saya masih tidak dapat menggunakan sed versi GNU. Sebagai contoh:

echo a | sed s_A_X_i

mengembalikan: bendera buruk dalam perintah substitusi 'i'

Apa yang harus saya lakukan agar versi GNU berfungsi? Berikut adalah jalur dalam variabel $ PATH saya.

/Users/WN/-myUnix
/opt/local/bin
/opt/local/sbin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
/Applications/calibre.app/Contents/MacOS
/opt/ImageMagick/bin
/usr/texbin 

Saya minta maaf jika pertanyaan saya tampak jelas, tetapi saya belajar skrip shell sendiri dan belum begitu mengerti bagaimana program UNIX diinstal. Bantuan apa pun untuk menggunakan perintah yang sesuai dengan GNU (dalam hal ini sed, tetapi segera saya akan membutuhkan yang lain juga) di Mac saya tanpa menyebabkan kerusakan atau kekacauan yang tidak perlu akan sangat dihargai.

pengguna3781201
sumber
2
Di mana brewmenginstal GNU sed? Apakah direktori itu ada di Anda PATH? Apa yang Anda dapatkan jika Anda mengetik sed --version? (BSD sedakan mengeluh; GNU sedakan melaporkan informasi versinya.) Sampai Anda memiliki brewdirektori di PATH sebelumnya /usr/binatau Anda belajar menggunakan nama path absolut ke GNU sed, Anda tidak akan menjalankan GNU sed. Berhati-hatilah dengan kutipan juga. adalah kutipan pemrosesan kata, tidak seperti '.
Jonathan Leffler

Jawaban:

112

Catatan (2019):

The --with-default-namesopsi dihapus sejak Januari 2019 jadi sekarang bahwa pilihan tidak tersedia lagi.

Saat menginstal, Homebrew menginstruksikan tentang cara menyesuaikan jalur, jika seseorang ingin menggunakan sed tanpa gawalan.


Anda sudah menginstal gnu-sed tanpa --with-default-namesopsi.

  • Dengan --with-default-namesopsi itu menginstal sedke/usr/local/bin/
  • Tanpa opsi itu, ia menginstal gsed

Jadi dalam kasus Anda, yang harus Anda lakukan adalah:

$ brew uninstall gnu-sed
$ brew install gnu-sed --with-default-names

Perbarui jalur jika perlu ...

$ echo $PATH | grep -q '/usr/local/bin'; [ $? -ne 0 ] && export PATH=/usr/local/bin:$PATH
$ echo a | sed 's_A_X_i'

atau gunakan gsedseperti yang disarankan orang lain.

Kashyap
sumber
8
--with-default-names option tidak lagi didukung
Amol
49

Saat Anda menginstal versi GNU seduntuk Mac OS X menggunakan:

$ brew install gnu-sed

Program yang Anda gunakan adalah gsed.

Jadi contohnya:

$ echo "Calimero is a little chicken" > test
$ cat test
Calimero is a little chicken
$ gsed -i "s/little/big/g" test
$ cat test
Calimero is a big chicken

Selain itu, untuk melengkapi penggunaan alat perintah GNU di Mac OS X, ada posting blog yang bagus di sini untuk mendapatkan alat dari linux:

Instal dan gunakan alat baris perintah GNU di Mac OS / OS X

anquegi
sumber
19

Yang seddisertakan dengan OS X sudah masuk /usr/bin.

The sedbahwa homebrewmenginstal adalah di/usr/local/bin .

Jika Anda lebih suka menggunakan homebrewsalah satunya, Anda memiliki dua opsi:

Pilihan 1

Setiap kali Anda ingin menggunakan homebrew sed, ketik

/usr/local/bin/sed

atau, lebih disukai

pilihan 2

Lanjutkan /usr/local/bin/(yaitu sebelum) /usr/bindi PATH Anda di profil login Anda, seperti ini

 export PATH=/usr/local/bin:<other places>
Mark Setchell
sumber
16

$ brew install gnu-sed

$ export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"

Dengan dua perintah ini, gnu-sed bekerja dengan baik

K Kishore
sumber
ingat ini hanya bekerja untuk sesi terminal saat ini
maheshmnj
8

Jika Anda perlu menggunakan perintah gnu-sed dengan nama normalnya, Anda dapat menambahkan direktori "gnubin" ke PATH Anda dari bashrc Anda. Cukup gunakan perintah berikut di bash atau terminal Anda.

export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
imechemi
sumber
2

--with-default-namestidak berfungsi untuk saya di Mac OS X 10.14.2 jadi saya membuat symlink bernama sedke gsedlebih tinggi di$PATH

Saya juga membuat symlink bernama sed.1ke halaman gsed.1manual yang lebih tinggi $MANPATHsehingga manakan mengakses halaman gsedmanual alih-alih halaman sedmanual default

chipsandslasa
sumber
4
Anda juga bisa melakukan alias, mis alias sed=gsed.
kenorb