किसी श्रेणी में लाइन की लंबाई के लिए "grep" कैसे करें?


28

नोट: यह प्रश्न इस Q & A का पूरक है: किसी श्रेणी में लाइन की लंबाई * नहीं * के लिए "grep" कैसे करें?


मुझे केवल एक टेक्स्टफाइल (एक शब्द सूची, जिसे न्यूलाइन के साथ अलग किया गया है) से केवल लाइनें प्राप्त करने की आवश्यकता है, जिसमें न्यूनतम 3 या उससे अधिक वर्णों की लंबाई है, लेकिन 10 से अधिक या बराबर नहीं है।

उदाहरण:

इनपुट:

egyezményét
megkíván
ki
alma
kevesen
meghatározó

उत्पादन:

megkíván
alma
kevesen

प्रश्न: मैं इसमें कैसे कर सकता हूं bash?


9
grep -x '.\{3,10\}'
कोस्टा

@ कोस्टास शानदार, और वही सेड के लिए भी जाता है। पूरा उत्तर पोस्ट करें।
ओरियन

जवाबों:


37
grep -x '.\{3,10\}'

कहा पे

  • -x मैच पैटर्न पूरी लाइन के लिए
  • . कोई भी प्रतीक
  • {3,10} पिछले प्रतीक से 3 से 10 गुना अधिक मात्रा में (किसी भी मामले में)

10

egrep का उपयोग करना

egrep '^.{3,10}$'

3 या अधिक वर्णों की पंक्तियों के अंत तक भीख मांगने से लेकर 10 वर्णों के बराबर या उससे कम के मेल खाते हैं।



0

का उपयोग कर awk:

awk 'length >= 3 && length <= 10' file

यह lengthकथन $0डिफ़ॉल्ट रूप से (वर्तमान रिकॉर्ड / लाइन) की लंबाई लौटाएगा , और इसका उपयोग कोड द्वारा लाइन की लंबाई का परीक्षण करने के लिए दिया जाता है। यदि इस तरह के एक परीक्षण में कोई संबंधित कार्रवाई ब्लॉक नहीं है, तो डिफ़ॉल्ट कार्रवाई रिकॉर्ड को प्रिंट करना है।

दिए गए डेटा पर परीक्षण:

$ awk 'length >= 3 && length <= 10' file
megkíván
alma
kevesen

इसी तरह पर्ल के साथ:

$ perl -lne '$l=length($_); print if ($l >= 3 && $l <= 10)' file
megkíván
alma
kevesen
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.