यदि यह उदाहरण के लिए: 2048 वर्ण से अधिक लंबा है तो मैं एक पंक्ति को कैसे हटा सकता हूं?
यदि यह उदाहरण के लिए: 2048 वर्ण से अधिक लंबा है तो मैं एक पंक्ति को कैसे हटा सकता हूं?
जवाबों:
sed '/^.\{2048\}./d' input.txt > output.txt
sed: 1: "/^.\{2048\}..*/d": RE error: invalid repetition count(s)(मैक ओएस एक्स)
यहां एक समाधान है जो 2049 या अधिक वर्ण वाली रेखाओं को हटाता है:
sed -E '/.{2049}/d' <file.in >file.out
अभिव्यक्ति /.{2049}/dकिसी भी लाइन से मेल खाएगी जिसमें कम से कम 2049 अक्षर हों और उन्हें इनपुट से हटा दिया जाए, जिससे आउटपुट पर केवल छोटी लाइन बनती है।
awk2048 या उससे कम लंबाई की छपाई लाइनों के साथ :
awk 'length <= 2048' <file.in >file.out
sedसमाधान का शाब्दिक रूप से नकल करना awk:
awk 'length >= 2049 { next } { print }' <file.in >file.out
sed: 1: "/^.\{400,\}$/d": RE error: invalid repetition count(s)(मैक ओएस एक्स)
पायथन में कुछ इस तरह से काम करना चाहिए।
of = open("orig")
nf = open("new",'w')
for line in of:
if len(line) < 2048:
nf.write(line)
of.close()
nf.close()
perl -lne "length < 2048 && print" infile > outfile
-lआवश्यकता नहीं है, यद्यपि।
Warning: Use of "length" without parentheses is ambiguous at -e line 1. Unterminated <> operator at -e line 1.
length($_) > 2048 && print। वैसे भी lengthएक शॉर्टकट length($_)है।
उपर्युक्त उत्तर मेरे लिए Mac OS X 10.9.5 पर काम नहीं करते हैं।
निम्नलिखित कोड काम करता है:
sed '/.\{2048\}/d'।
यद्यपि पूछा नहीं गया है, लेकिन संदर्भ के लिए प्रदान किया गया है, रिवर्स को निम्नलिखित कोड प्राप्त किया जा सकता है:
sed '/.\{2048\}/!d'।
sed: 1: "/.\{2048\}/d": RE error: invalid repetition count(s)( Mac OS X, 10.10.4)
ग्नू-सेड के साथ, आप एक खुले अंतराल को परिभाषित करने के लिए, बैकस्लैश टाइप करने से बचने के लिए, और कॉमा का उपयोग कर सकते हैं।
sed -r "/.{2049,}/d" input.txt > output.txt
साथ में:
अंतराल के लिए, बड़े पैटर्न से मेल न खाने के लिए, आपको लाइन एंकर की आवश्यकता होगी
sed -r "/^.{32,64}$/d" input.txt > output.txt