วิธีใช้ GNU sed บน Mac OS 10.10+ ไม่รองรับ 'brew install --default-names' อีกต่อไป


98

ภายใต้ Mac OS 10.10.3 ฉันติดตั้ง gnu-sed โดยพิมพ์:

brew install gnu-sed --default-names

เมื่อฉันพิมพ์อีกครั้งฉันจะได้รับข้อความ:

gnu-sed-4.2.2 ติดตั้งแล้ว

อย่างไรก็ตามแม้ว่าจะรีบูตระบบและรีสตาร์ท Terminal ฉันก็ยังไม่สามารถใช้ sed เวอร์ชัน GNU ได้ ตัวอย่างเช่น:

echo a | sed ’s_A_X_i’

ผลตอบแทน: แฟล็กที่ไม่ถูกต้องในคำสั่งการแทนที่ 'i'

ฉันควรทำอย่างไรเพื่อให้เวอร์ชัน GNU ทำงานได้ นี่คือเส้นทางในตัวแปร $ PATH ของฉัน

/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 

ฉันขอโทษหากคำถามของฉันดูเหมือนชัดเจน แต่ฉันกำลังเรียนรู้เชลล์สคริปต์ด้วยตัวเองและยังไม่ค่อยเข้าใจวิธีการติดตั้งโปรแกรม UNIX ความช่วยเหลือใด ๆ ในการใช้คำสั่งที่สอดคล้องกับ GNU (ในกรณีนี้คือ sed แต่ในไม่ช้าฉันก็ต้องการคนอื่นเช่นกัน) บน Mac ของฉันโดยไม่ทำให้เกิดความเสียหายหรือเกะกะโดยไม่จำเป็น


2
ไม่อยู่ที่ไหนbrewติดตั้ง GNU sed? ไดเรกทอรีนั้นอยู่ในของคุณPATHหรือไม่? คุณจะได้อะไรถ้าพิมพ์sed --version? (BSD sedจะบ่น; GNU sed. จะรายงานข้อมูลเกี่ยวกับรุ่นของมัน) จนกว่าคุณจะมีbrewไดเรกทอรีบนเส้นทางของคุณก่อน/usr/binหรือคุณเรียนรู้ที่จะใช้ชื่อพา ธ ที่แน่นอนที่จะ GNU คุณจะไม่ได้รับการทำงานของกนูsed sedระวังคำพูดด้วย เป็นคำพูดที่ประมวลผลคำซึ่งแตกต่างจาก '
Jonathan Leffler

คำตอบ:


114

หมายเหตุ (2019):

--with-default-namesตัวเลือกถูกลบออกตั้งแต่เดือนมกราคม 2019 ดังนั้นตอนนี้ตัวเลือกที่จะไม่สามารถใช้ได้อีกต่อไป

เมื่อติดตั้ง Homebrew จะแนะนำวิธีปรับเส้นทางหากต้องการใช้ sed โดยไม่มีgคำนำหน้า


คุณติดตั้ง gnu-sed แล้วโดยไม่มี--with-default-namesตัวเลือก

  • ด้วย--with-default-namesตัวเลือกที่จะติดตั้งsedไป/usr/local/bin/
  • หากไม่มีตัวเลือกนั้นจะติดตั้ง gsed

ดังนั้นในกรณีของคุณสิ่งที่คุณต้องทำคือ:

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

อัปเดตเส้นทางหากจำเป็น ...

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

หรือใช้gsedตามที่ผู้อื่นแนะนำ


9
- ไม่รองรับตัวเลือกด้วยชื่อเริ่มต้นอีกต่อไป
Amol

51

เมื่อคุณติดตั้งเวอร์ชัน GNU sedสำหรับ Mac OS X โดยใช้:

$ brew install gnu-sed

โปรแกรมที่คุณใช้คือgsed.

ตัวอย่างเช่น:

$ 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

นอกจากนี้เพื่อเป็นการชมเชยการใช้เครื่องมือคำสั่ง GNU บน Mac OS X มีบล็อกโพสต์ที่ดีที่นี่เพื่อรับเครื่องมือจาก linux:

ติดตั้งและใช้เครื่องมือบรรทัดคำสั่ง GNU บน Mac OS / OS X


20

sedที่มาพร้อมกับ OS X /usr/binเป็นใน

sedที่ติดตั้งอยู่ในhomebrew/usr/local/bin

หากคุณต้องการใช้homebrewอันนี้คุณมีสองตัวเลือก:

ตัวเลือกที่ 1

ทุกครั้งที่ต้องการใช้homebrew sedให้พิมพ์

/usr/local/bin/sed

หรือโดยเฉพาะอย่างยิ่ง

ทางเลือกที่ 2

เลื่อน/usr/local/bin/ไปข้างหน้า (เช่นก่อนหน้า) /usr/binใน PATH ของคุณในโปรไฟล์การเข้าสู่ระบบของคุณเช่นนี้

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

ฉันได้พยายามนี้ แต่มันก็ไม่ได้ทำให้ส่งผลกระทบใด ๆ
Alper

17

$ brew install gnu-sed

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

ด้วยคำสั่งทั้งสองนี้ gnu-sed ทำงานได้อย่างถูกต้อง


โปรดจำไว้ว่าสิ่งนี้ใช้ได้กับเซสชันเทอร์มินัลปัจจุบันเท่านั้น
maheshmnj

8

หากคุณต้องการใช้คำสั่ง gnu-sed กับชื่อปกติคุณสามารถเพิ่มไดเร็กทอรี "gnubin" ไปยัง PATH ของคุณจาก bashrc ของคุณ เพียงใช้คำสั่งต่อไปนี้ใน bash หรือ terminal ของคุณ

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

2

--with-default-namesใช้งานไม่ได้สำหรับฉันบน Mac OS X 10.14.2 ดังนั้นฉันจึงสร้าง symlink ที่ตั้งชื่อsedให้gsedสูงขึ้นในไฟล์$PATH

ฉันยังสร้าง symlink ที่ตั้งชื่อsed.1เป็นไฟล์gsed.1 manpage ที่สูงขึ้น$MANPATHเพื่อที่manจะเข้าถึงgsedmanpage แทนsedmanpage เริ่มต้น


4
alias sed=gsedนอกจากนี้คุณยังสามารถทำนามแฝงเช่น
kenorb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.