grep สำหรับสตริงตัวอักษรผสมตัวเลขที่มีความยาวใด ๆ กับโคลอนในแต่ละด้าน


14

วิธีที่คุณจะ grep สำหรับสตริงและตัวเลข 1 ถึง 50 ตัวอักษร (นึกคิด, ความยาวใด ๆ ที่จะทำงานมากเกินไป) กับลำไส้ใหญ่ในแต่ละด้าน - :shopping:ผลโดยทั่วไปจะเป็นทุกสายที่มีสตริง จนถึงตอนนี้ฉันได้รับรหัสด้านล่าง (ฉันลองใช้รูปแบบที่หลากหลาย) ซึ่งใช้งานไม่ได้:

grep ':[[:alnum:]]{1,100}:' ~/x.txt

คุณเพียงแค่ต้องเปิดใช้งานความสามารถของ regex แบบขยายgrepโดยรวม-Eสวิตช์ไว้ด้วย
slm

คำตอบ:



4

ด้วยการแสดงออกปกติพื้นฐานคุณสามารถเขียนได้เช่น:

grep ':[[:alnum:]]\{1,100\}:' ~/x.txt

โปรดทราบว่า\{(เมื่อเทียบกับ\+หรือ\?เป็นต้น) เป็นมาตรฐานและแบบพกพาและจริงเทียบเท่า BRE ของ+และ?มีการเขียนโดยปกติจะมี\{: และ\{1,\} ยังเป็นมาตรฐานและพกพาได้ดังนั้นคุณอาจใช้มันเพราะมันทำให้ regexps อ่านง่ายขึ้นในกรณีเหล่านั้น\{0,1\}grep -E


1

คุณกำลังใช้การแสดงผลปกติเพิ่มเติมดังนั้นคุณต้องใช้ตัวเลือก -E:

grep -E ':[[:alnum:]]{1,100}:' ~/x.txt

ขอบคุณ! ฉันใส่คำตอบอื่นถูกต้องเพราะฉันไม่ได้เขียนสคริปต์ "อุดมคติ" ของฉันไว้ในพาดหัวและฉันไม่ต้องการให้คนที่ google หาคำตอบเพื่อคัดลอกวางคำตอบที่ผิด แต่ฉันจะใช้ของคุณ :)

1
@TorThommesen - คุณสามารถแก้ไขชื่อของ Q ของคุณหากมันไม่ถูกต้อง
slm

0

เนื่องจากไม่มีใครพูดถึงเรื่องนี้คุณยังอาจจะใช้ซึ่งเป็นฉันเข้าใจมันจะเทียบเท่ากับegrepgrep -E

egrep ':[[:alnum:]]{1,100}:' ~/x.txt

1
egrepเป็นคำสั่งทางประวัติศาสตร์เพื่อ grep กับ EREs ฟังก์ชันการทำงานของ grep และ egrep มีตั้งแต่ (นานมาแล้ว) ถูกรวมเข้ากับ grep ด้วยตัวเลือก -E egrepตอนนี้ถือว่าล้าสมัย / เลิกใช้แล้ว (แต่ไม่น่าเป็นไปเพราะบางคนยังคุ้นเคยกับมัน)
Stéphane Chazelas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.