2013-02-04 15 views
14

मैं लिनक्स बैश कमांड का उपयोग कर अपनी फ़ाइल से सभी नियंत्रण वर्णों को हटाना चाहता हूं।फ़ाइल से नियंत्रण कक्ष हटा रहा है

ईओएफ (0x1A) जैसे कुछ नियंत्रण वर्ण हैं, विशेष रूप से समस्या उत्पन्न कर रहे हैं जब मैं किसी अन्य सॉफ़्टवेयर में अपनी फ़ाइल लोड करता हूं। मैं इसे हटाना चाहता हूं।

यहाँ मैं अब तक की कोशिश की है है:

$ cat file.txt | head -n 10 | grep '[[:cntrl:]]' 
+ 
1 

- 
- 
1 
% 
- 
. 
/

मैचों:

cat -v -e -t file.txt | head -n 10 

^A+^X$ 
^A1^X$ 
^D ^_$ 
^E-^D$ 
^E-^S$ 
^E1^V$ 
^F%^_$ 
^F-^D$ 
^F.^_$ 
^F/^_$ 
^F4EZ$ 
^G%$ 

यह ग्रेप का उपयोग करके सभी नियंत्रण वर्ण सूची जाएगा:

यह सब नियंत्रण वर्ण सूची जाएगा बिल्ली कमांड के उपरोक्त आउटपुट।

अब, मैं सभी लाइनों नियंत्रण वर्ण युक्त नहीं दिखाने के लिए निम्न आदेश भाग गया लेकिन यह अभी भी एक ही उत्पादन दिखाया जा रहा है के रूप में ऊपर (नियंत्रण पात्रों के साथ लाइनों)

$ cat file.txt | head -n 10 | grep '[^[:cntrl:]]' 
+ 
1 

- 
- 
1 
% 
- 
. 
/

यहाँ हेक्स प्रारूप में उत्पादन होता है:

$ cat file.txt | head -n 10 | grep '[[:cntrl:]]' | od -t x2 
0000000 2b01 0a18 3101 0a18 2004 0a1f 2d05 0a04 
0000020 2d05 0a13 3105 0a16 2506 0a1f 2d06 0a04 
0000040 2e06 0a1f 2f06 0a1f 
0000050 

जैसा कि आप देख सकते हैं, हेक्स मान, 0x01, 0x18 नियंत्रण वर्ण हैं।

मैं टीआर आदेश का उपयोग नियंत्रण वर्णों को हटाने की कोशिश की लेकिन एक त्रुटि मिली:

$ cat file.txt | tr -d "\r\n" "[:cntrl:]" >> test.txt 
tr: extra operand `[:cntrl:]' 
Only one string may be given when deleting without squeezing repeats. 
Try `tr --help' for more information. 

अगर मैं सभी नियंत्रण वर्णों को हटाने, मैं न्यू लाइन और गाड़ी वापसी को हटाने के साथ-साथ जो के रूप में प्रयोग किया जाता है खत्म हो जाएगा विंडोज़ पर न्यूलाइन अक्षर। मैं केवल "\ r \ n" जैसे आवश्यक रखने वाले सभी नियंत्रण वर्णों को कैसे हटाऊं?

धन्यवाद।

+0

'grep' आउटपुट की लाइनों को grep करेगा जब तक कि आप '-o' विकल्प का उपयोग नहीं कर रहे हों। – devnull

उत्तर

18
इसके बजाय पूर्वनिर्धारित [:cntrl:] सेट है, जो के रूप में आप मनाया \n और \r, बस सूची (अष्टाधारी में) नियंत्रण वर्ण आप चाहते हैं शामिल हैं का उपयोग करने का

से छुटकारा पाने के:

$ tr -d '\000-\011\013\014\016-\037' <file.txt> newfile.txt 
1

grep की कोशिश करें, जैसे:

grep -o "[[:print:][:space:]]*" in.txt > out.txt 

जो विराम चिह्नों और टैब, न्यूलाइन, लंबवत टैब, फॉर्म फ़ीड, कैरिज रिटर्न और स्पेस जैसे स्पेस कैरेक्टर समेत केवल अल्फान्यूमेरिक वर्णों को प्रिंट करेगा।

कम प्रतिबंधक होने के लिए, और केवल control characters ([:cntrl:]) को हटाने, द्वारा उन्हें हटा दें:

tr -d "[:cntrl:]" 

आप \n रखने के लिए (जो [:cntrl:] का हिस्सा है), तो यह अस्थायी रूप से कुछ और करने के लिए की जगह चाहते हैं, जैसे

cat file.txt | tr '\r\n' '\275\276' | tr -d "[:cntrl:]" | tr "\275\276" "\r\n" 
1

यूनिक्स पर this answer पर आधारित।stackexchange, इस चाल करना चाहिए:

$ cat scriptfile.raw | col -b > scriptfile.clean 
+0

ब्रूस एडिगर के लिए धन्यवाद https://unix.stackexchange.com/questions/15855/how-to-dump-a-man-page/15866#15866?newreg=4613fa4638aa4965ac10b183c10678df –

0

पार्टी के लिए एक छोटी सी देर: cat -v <file> जो मुझे लगता है कि सबसे आसान बहुत से याद करने के लिए है!

संबंधित मुद्दे