การค้นหาแบบเรียกซ้ำไม่ทำงานสำหรับ grep บน solaris


20

Solaris บนเซิร์ฟเวอร์ของเราฉันพบว่าไม่ทำงานซึ่งเป็นวิธีการปกติที่ผมใช้grep -r grepดูเหมือนว่าegrepจะมีพฤติกรรมเหมือนกัน

เนื่องจากฉันไม่สามารถควบคุมเครื่องได้มีวิธีgrepทำการค้นหาแบบเรียกซ้ำหรือไม่? หรือฉันจะต้องท่อส่งออกของfindเข้ามาgrep?


1
คุณใช้โซลาริสรุ่นใด?
jlliagre

คำตอบ:


4

ฉันไม่คุ้นเคยกับ Solaris แต่ถ้าคุณเปลี่ยนจาก GNU / linux เป็น Solaris คุณจะพบว่าคำสั่งส่วนใหญ่จะทำงานแตกต่างกันเล็กน้อย เครื่องมือของ Unix รุ่น GNU มีคุณสมบัติเพิ่มเติมที่หายไปใน Unixes "กรรมสิทธิ์"

คุณสามารถดาวน์โหลด GNU grep (s) ที่นี่แล้วรวบรวมและติดตั้ง

หากคุณมีสิทธิ์เข้าถึงรูทคุณอาจต้องการรันการตั้งค่า --prefix = / usr / local ซึ่งยูทิลิตี้ติดตั้งลงใน / usr / local

หากคุณไม่มีสิทธิ์การเข้าถึงรูทคุณอาจต้องการรันการกำหนดค่า --prefix = $ {HOME} เพื่อให้ยูทิลิตี้ติดตั้งในโฮมไดเร็กตอรี่ของคุณ


--prefix=${HOME}}/.localอาจจะแนะนำให้เลือกมากกว่า ... ไม่ต้องวุ่นวายกับโฮมไดsharelib
เร็กตอรี่

1
ความยุ่งเหยิงของชายคนหนึ่งเป็นการจัดระเบียบของชายอีกคนหนึ่ง
bsd

ไม่ต้องสงสัยเลย! พูดตามตรงฉันป้องกันวันหยุดเมื่อฉันพูดว่า " share? นั่นต้องเป็นไดเรกทอรีขยะ!" rm -rfDoh!
jpaugh

31

หากคุณต้องการใช้findนี่เป็นวิธีที่เร็วที่สุด:

find . -type f -exec grep pattern {} +

อย่างไรก็ตาม Gnu grep มีโอกาสมากที่ติดตั้งบนเครื่องของคุณแล้ว

มันเป็นส่วนหนึ่งของการติดตั้งเริ่มต้นบน Solaris /usr/gnu/bin/grep11 เหมือนกันสำหรับ Solaris 10 /usr/sfw/bin/ggrepที่คุณหาได้ใน ในรุ่นเก่าอาจถูกติดตั้งจาก sunfreeware หรือที่เก็บอื่นตรวจสอบ/usr/local/bin/grepและค้นหา/opt/csw/bin/grepตำแหน่งทั่วไป


นอกจากนี้คุณยังสามารถใช้ประโยชน์จากตัวเลือกที่มี-name find
sleepyweasel

@sleepyweasel -nameจะไม่ค้นหาไฟล์ แต่ค้นหาเฉพาะชื่อไฟล์ที่ไม่ใช่สิ่งที่ OP ต้องการ
jlliagre

6

ใช้ggrepแทนหากติดตั้งไว้

เช่นค้นหา "mysearchstring" จากไดเรกทอรีปัจจุบันไปยังไดเรกทอรีย่อยทั้งหมด ( -R) และแสดงชื่อไฟล์และเส้นทางสำหรับการจับคู่ ( -H) และละเว้นไฟล์ไบนารี ( -I) อย่าลืม*คำสั่งสุดท้าย

/usr/sfw/bin/ggrep -H -R -I "mysearchstring" *

ggrep ตั้งอยู่ใน/usr/sfw/bin คุณสามารถเพิ่มลงในโปรไฟล์ของคุณด้วยคำสั่งส่งออกเพื่อให้คุณสามารถเรียกได้จากบรรทัดคำสั่งโดยตรง

PATH=$PATH:/usr/sfw/bin
export PATH

รุ่น Solaris: SunOS 5.10 Generic_147440-13 sun4u sparc SUNW, SPARC-Enterprise


1
อย่างน้อยในระบบของฉันggrepเป็น grep GNU แน่นอน ขอบคุณ!
jpaugh

3

ดาวน์โหลดackสคริปต์ perl แบบสแตนด์อโลนจากhttp://betterthangrep.com/ใส่ไว้ในของคุณ$HOME/binและเรียนรู้การใช้งานแทน ฉันพบว่ามันเป็นโฆษณาที่ดีกว่า grep สำหรับการใช้งานจำนวนมากในงานพัฒนาประจำวันของฉัน


3

Solaris grep ไม่มี-rตัวเลือก

คุณสามารถใช้คำสั่งดังต่อไปนี้

find . -type f | xargs grep 'sometext'

2
คุณไม่จำเป็นต้อง "ควบคุมระบบ" เพื่อคอมไพล์ GNU grep และติดตั้งที่ใดที่หนึ่งภายใต้โฮมไดเร็กตอรี่ของคุณ.
Keith Thompson

@ KeithThompson ขอบคุณที่ชี้ให้เห็น ฉันแก้ไขคำตอบของฉันแล้ว
Sachin Divekar

สิ่งนี้มีประโยชน์มากในการค้นหาไฟล์ทั้งหมดที่ตรงกับรูปแบบชื่อและแสดงผลลัพธ์ด้วยไฟล์ เช่น find /opt/ -name "*.sh" -type f | xargs grep "start"
Underverse

1

ใช่คุณจำเป็นต้องใช้ GNU grep โดยส่วนตัวฉันไม่ควรพลาดแฟล็ก "-r" เพราะคุณสามารถทำสิ่งเดียวกันได้ด้วยการรวมกันfindและgrepแต่สิ่งนี้เตือนว่าการมีเครื่องมือ GNU ที่มีอยู่ในกล่อง Solaris ของคุณเป็นสิ่งที่ฉันจะพิจารณาแนวปฏิบัติที่ดีที่สุด ดังนั้นเราไปที่นี่:

ฉันจะไม่ไปเกี่ยวกับการดาวน์โหลดซอร์สโค้ดจากที่ต่างๆบนอินเทอร์เน็ตแล้วสร้างตัวคุณเอง ที่ไม่จำเป็น หากคุณต้องการให้โซลาริสของคุณมีเครื่องมือ GNU ทั่วไปที่มีอยู่ให้ทำดังนี้

หากคุณอยู่บนSolaris 10คุณควรได้รับ Solaris 10 Companion Disk ที่ใช้ในการจัดจำหน่ายโดยดวงอาทิตย์ แต่ตอนนี้อาศัยอยู่ที่นี่ ส่วนตัวฉันจะทำให้มันเป็นกระต่ายเสมอเพื่อติดตั้งเนื้อหาของดิสก์นี้หรืออย่างน้อยที่สุดส่วน GNU ที่สำคัญที่สุด เป็นส่วนหนึ่งของ JumpStart (หรืออะไรก็ตามที่คุณใช้) สำหรับเซิร์ฟเวอร์ใหม่ในองค์กรของคุณ!

ถ้าคุณอยู่บนโซลาริส 11ชีวิตนั้นง่ายกว่ามาก โดยปกติแล้วเครื่องมือของ GNU จะถูกติดตั้งตามค่าเริ่มต้น แต่ไม่ทั้งหมดจะถูกแพร่กระจายไปยังโซนในเครื่อง IFS ระบบบรรจุภัณฑ์บน Solaris 11 ทำให้ชีวิตของคุณง่ายขึ้นมากดังนั้นคุณควรจะย้ายไปที่ Solaris 11 (เหตุผลอื่น ๆ อีกมากมาย) รายการแพ็กเกจที่คุณควรพิจารณาให้มีอยู่เสมอสำหรับโซนใด ๆ ได้แก่ :

pkg: // Solaris / Archiver / GNU-tar
pkg: // Solaris / พัฒนา / GNU-binutils
pkg: // Solaris / วินิจฉัย / ด้านบน
pkg: // Solaris / ไฟล์ / GNU-coreutils
pkg: // Solaris / ไฟล์ / GNU-findutils
pkg: // Solaris / ข้อความ / เพ่งพิศ
pkg: // Solaris / ข้อความ / GNU-diffutils
pkg: // Solaris / ข้อความ / GNU-grep
pkg: // Solaris / ข้อความ / GNU-sed

และถ้าคุณใช้โฮสต์เพื่อวัตถุประสงค์ในการพัฒนา / สร้างคุณอาจต้องการเพิ่ม:

pkg: // Solaris / พัฒนา / สร้าง / GNU-แต่งหน้า
pkg: // Solaris / พัฒนา / สร้าง / แต่งหน้า
pkg: // Solaris / พัฒนา / GCC-45
pkg: // Solaris / system / หัว
pkg: // Solaris / พัฒนา / สร้าง / autoconf
pkg: // Solaris / พัฒนา / สร้าง / automake-110

โดยส่วนตัวแล้วฉันจะทำส่วนบน (อาจเป็นเครื่องมือ dev น้อยกว่า) ส่วนหนึ่งของการติดตั้งเริ่มต้นของ บริษัท ของฉันสำหรับเซิร์ฟเวอร์ / โซนใหม่ Solaris sysadmins มักจะยืนยันว่าแตกต่างจากโลก Linux แต่ไม่จำเป็นต้องทำ เพียงทำและทำให้เป็นส่วนหนึ่งของการติดตั้งเริ่มต้นของคุณ คุณจะไม่เสียใจ


ฉันไม่แน่ใจว่าถ้าคุณอ่านส่วนที่ฉันพูดว่า 'เนื่องจากฉันไม่สามารถควบคุมเครื่องจักร ... ' ฉันแน่ใจว่านี่เป็นข้อมูลที่มีประโยชน์สำหรับใครบางคน แต่มันก็ไม่ค่อยตอบคำถามที่ฉันถาม .
Eric Wilson

มันเป็นข้อมูลสำหรับดูแลระบบของคุณ เขาให้เครื่องไอ้ง่อยแก่คุณ สิ่งเหล่านี้ควรติดตั้งโดยค่าเริ่มต้น แต่ใช่คุณพูดถูกข้อมูลอาจมีไว้สำหรับผู้อื่นที่มาที่นี่และอ่านคำถามของคุณ วันนี้คุณหาย grep GNU พรุ่งนี้คุณจะหายไป GNU tar ฯลฯ คุณยังไม่รู้ :-)
peterh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.