Mac OS 10.10+ üzerinde GNU sed nasıl kullanılır, 'brew install --default-names' artık desteklenmiyor


98

Mac OS 10.10.3 altında, gnu-sed'i yazarak kurdum:

brew install gnu-sed --default-names

Tekrar yazdığımda şu mesajı alıyorum:

gnu-sed-4.2.2 zaten kurulu

Ancak, sistemi yeniden başlattıktan ve Terminal'i yeniden başlattıktan sonra bile sed'in GNU sürümünü hala kullanamıyorum. Örneğin:

echo a | sed ’s_A_X_i’

döndürür: 'i' değiştirme komutundaki hatalı bayrak

GNU sürümünün çalışması için ne yapmalıyım? İşte $ PATH değişkenimdeki yollar.

/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 

Sorum açık görünüyorsa özür dilerim, ancak kendi başıma kabuk komut dosyası yazmayı öğreniyorum ve henüz UNIX programlarının nasıl kurulduğunu tam olarak anlamıyorum. Mac'imde hasara veya gereksiz dağınıklığa neden olmadan GNU uyumlu komutları (bu durumda sed, ancak yakında başkalarına da ihtiyacım olacak) kullanmak için herhangi bir yardım büyük ölçüde takdir edilecektir.


2
brewGNU nerede kuruldu sed? Bu dizin senin üzerinde PATHmi? Yazarsan ne elde edersin sed --version? (BSD sedşikayet edecek; GNU sed, sürüm bilgisini raporlayacaktır.) brewÖnünüzde PATH'inizdeki dizine sahip olana /usr/binveya GNU'ya giden mutlak yol adını kullanmayı öğrenene kadar, GNU'yu sedçalıştırmayacaksınız sed. Alıntılara da dikkat edin. aksine bir kelime işlem alıntıdır '.
Jonathan Leffler

Yanıtlar:


114

Not (2019):

Bu --with-default-namesseçenek Ocak 2019'dan beri kaldırıldı , bu nedenle artık bu seçenek mevcut değil.

Kurulum sırasında, biri gönek olmadan sed kullanmak isterse, Homebrew yolun nasıl uyarlanacağı konusunda talimat verir .


Gnu-sed'i --with-default-namesseçenek olmadan zaten yüklediniz .

  • İle --with-default-namesopsiyon o yükler sediçin/usr/local/bin/
  • Bu seçenek olmadan yükler gsed

Yani senin durumunda yapman gereken şey:

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

Gerekirse yolu güncelleyin ...

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

veya gsedbaşkalarının önerdiği şekilde kullanın .


8
--with-default-names seçeneği artık desteklenmiyor
Amol

51

sedMac OS X için GNU sürümünü aşağıdakileri kullanarak yüklediğinizde :

$ brew install gnu-sed

Kullandığınız program gsed.

Yani mesela:

$ 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

Ayrıca, Mac OS X'te GNU komut araçlarının kullanımına iltifat etmek için, burada araçları linux'tan alabileceğiniz güzel bir blog yazısı var:

Mac OS / OS X'te GNU komut satırı araçlarını kurun ve kullanın


20

sedOS X ile birlikte gelen içindedir /usr/bin.

sedBu homebrewyükler içindedir /usr/local/bin.

homebrewBirini kullanmayı tercih ederseniz, iki seçeneğiniz vardır:

seçenek 1

Her kullanmak istediğinizde homebrew sedyazın

/usr/local/bin/sed

veya tercihen

seçenek 2

Taşı /usr/local/bin/öncesinde (yani önce) /usr/binböyle, giriş profilinde PATH içinde

 export PATH=/usr/local/bin:<other places>

Bunu denedim ama herhangi bir etkisi olmadı
alper

16

$ brew install gnu-sed

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

Bu iki komutla gnu-sed düzgün çalışır


bunun yalnızca mevcut terminal oturumu için çalıştığını unutmayın
maheshmnj

8

Eğer gnu-sed komutunu normal isimleriyle kullanmanız gerekiyorsa, bashrc'nizden PATH'inize bir "gnubin" dizini ekleyebilirsiniz. Bash veya terminalinizde aşağıdaki komutu kullanmanız yeterlidir.

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

2

--with-default-namesMac OS X 10.14.2 benim için işe yaramadı ben adında bir sembolik yarattı yüzden sedhiç gsedyüksek$PATH

Ayrıca sed.1, gsed.1üstteki manpage adında bir sembolik bağlantı oluşturdum , $MANPATHböylece varsayılan manpage yerine manpage'e manerişecektim.gsedsed


4
Örneğin takma ad da yapabilirsiniz alias sed=gsed.
kenorb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.