Cách sử dụng GNU sed trên Mac OS 10.10+, 'brew install --default-names' không còn được hỗ trợ


95

Trong Mac OS 10.10.3, tôi đã cài đặt gnu-sed bằng cách nhập:

brew install gnu-sed --default-names

Khi tôi gõ lại, tôi nhận được thông báo:

gnu-sed-4.2.2 đã được cài đặt

Tuy nhiên, ngay cả sau khi khởi động lại hệ thống và khởi động lại Terminal, tôi vẫn không thể sử dụng phiên bản GNU của sed. Ví dụ:

echo a | sed s_A_X_i

return: cờ xấu trong lệnh thay thế 'i'

Tôi nên làm gì để phiên bản GNU hoạt động? Đây là các đường dẫn trong biến $ PATH của tôi.

/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 

Tôi xin lỗi nếu câu hỏi của tôi có vẻ rõ ràng, nhưng tôi đang tự học script shell và chưa hiểu rõ cách cài đặt các chương trình UNIX. Bất kỳ trợ giúp nào để sử dụng các lệnh tuân thủ GNU (trong trường hợp này là sed, nhưng tôi sẽ sớm cần đến những người khác) trên máy Mac của tôi mà không gây ra thiệt hại hoặc lộn xộn không cần thiết sẽ được đánh giá cao.


2
Trong trường hợp đã brewcài đặt GNU sed? Thư mục đó có trên của bạn PATHkhông? Bạn nhận được gì nếu bạn gõ sed --version? (BSD sedsẽ phàn nàn; GNU sedsẽ báo cáo thông tin phiên bản của nó.) Cho đến khi bạn có brewthư mục trên PATH trước /usr/binhoặc bạn học cách sử dụng tên đường dẫn tuyệt đối tới GNU sed, bạn sẽ không chạy GNU sed. Hãy cẩn thận với các dấu ngoặc kép. là một trích dẫn xử lý văn bản, không giống như '.
Jonathan Leffler

Câu trả lời:


112

Lưu ý (2019):

Các --with-default-namestùy chọn được loại bỏ kể từ tháng 1 năm 2019, vì vậy bây giờ mà lựa chọn là không có sẵn nữa.

Khi cài đặt, Homebrew hướng dẫn cách điều chỉnh đường dẫn, nếu người ta muốn sử dụng sed mà không cần gtiền tố.


Bạn đã cài đặt gnu-sed mà không có --with-default-namestùy chọn.

  • Với --with-default-namestùy chọn, nó cài đặt sedthành/usr/local/bin/
  • Nếu không có tùy chọn đó, nó sẽ cài đặt gsed

Vì vậy, trong trường hợp của bạn, điều bạn phải làm là:

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

Cập nhật đường dẫn nếu cần ...

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

hoặc sử dụng gsednhư những người khác đề xuất.


8
Tùy chọn --with-default-names không còn được hỗ trợ nữa
Amol

49

Khi bạn cài đặt phiên bản GNU của seddành cho Mac OS X bằng:

$ brew install gnu-sed

Chương trình mà bạn sử dụng là gsed.

Ví dụ:

$ 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

Ngoài ra, để khen ngợi việc sử dụng các công cụ lệnh GNU trên Mac OS X, có một bài đăng trên blog rất hay ở đây để tải các công cụ từ linux:

Cài đặt và sử dụng các công cụ dòng lệnh GNU trên Mac OS / OS X


19

Các sedmà tàu với OS X là trong /usr/bin.

Các sedrằng homebrewcài đặt là trong /usr/local/bin.

Nếu bạn thích sử dụng homebrewcái này, bạn có hai lựa chọn:

lựa chọn 1

Mỗi khi bạn muốn sử dụng homebrew sed, hãy nhập

/usr/local/bin/sed

hoặc, tốt hơn là

Lựa chọn 2

Tiến /usr/local/bin/lên (tức là trước) /usr/bintrong PATH trong hồ sơ đăng nhập của bạn, như thế này

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

16

$ brew install gnu-sed

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

Với hai lệnh này, gnu-sed hoạt động bình thường


hãy nhớ điều này chỉ hoạt động cho phiên đầu cuối hiện tại
maheshmnj

8

Nếu bạn cần sử dụng lệnh gnu-sed với tên thông thường của chúng, bạn có thể thêm thư mục "gnubin" vào PATH từ bashrc của bạn. Chỉ cần sử dụng lệnh sau trong bash hoặc terminal của bạn.

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

2

--with-default-nameskhông làm việc cho tôi trên Mac OS X 10.14.2 vì vậy tôi đã tạo ra một liên kết tượng trưng tên sedđể gsedcao hơn trong$PATH

Tôi cũng đã tạo một liên kết tượng trưng được đặt tên sed.1cho gsed.1trang web cao hơn $MANPATHđể mantruy cập gsedtrang đó thay vì sedtrang mặc định


4
Bạn cũng có thể làm bí danh, ví dụ alias sed=gsed.
kenorb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.