2009-10-24 17 views
11

मैं की तरहटैब अक्षरों के साथ नई लाइनों को कैसे प्रतिस्थापित करें?

नीचे
hi 
hello 
hallo 
greetings 
salutations 
no more hello for you 

मैं निम्न आदेश

sed -e "s_/\n_/\t_g" 

का उपयोग कर टैब के साथ सभी नई-पंक्तियों को बदलने के लिए कोशिश कर रहा हूँ, लेकिन यह काम नहीं कर रहा पैटर्न है।

क्या कोई मदद कर सकता है? मैं sed/awk में एक समाधान की तलाश में हूँ।

उत्तर

11
उत्पादन के बारे में निश्चित नहीं

आप

# awk -vRS="\n" -vORS="\t" '1' file 
hi  hello hallo greetings  salutations  no more hello for you 
32

यहाँ tr बेहतर है, मुझे लगता है कि:

tr "\n" "\t" < newlines 

Nifle के रूप में एक टिप्पणी में सुझाव दिया, newlines यहाँ फ़ाइल मूल पाठ पकड़े का नाम है।

क्योंकि sed इतनी रेखा-उन्मुख है, इस तरह के मामले में उपयोग करना अधिक जटिल है।

+1

+1 40 सेकंड तक मुझे मारो – Nifle

+0

@ निफ्ले: यहां कोई भी बिल्ली नहीं है, लेकिन कौन गिन रहा है? :) – Telemachus

+0

शायद यह इंगित करना चाहें कि 'न्यूलाइन' टेक्स्टफाइल – Nifle

5

चाहते हैं तो आप sed के साथ एक पंक्ति-दर-पंक्ति के आधार पर नई-पंक्तियों को बदल नहीं सकते। आपको लाइनों को जमा करना होगा और को के बीच नईलाइनों को प्रतिस्थापित करना होगा।

text abc\n <- can't replace this one 

text abc\ntext def\n <- you can replace the one after "abc" but not the one at the end 

यह sed स्क्रिप्ट सभी लाइनों जम जाता है और सभी नई-पंक्तियों लेकिन पिछले समाप्त:

sed -n '1{x;d};${H;x;s/\n/\t/g;p};{H}' 

वैसे, अपने sed स्क्रिप्ट sed -e "s_/\n_/\t_g" कहने के लिए "सभी स्लैश के साथ नई-पंक्तियों के बाद की जगह कोशिश कर रहा है टैब के बाद slashes "। अंडरस्कोर s कमांड के लिए डिलीमीटर की भूमिका निभा रहे हैं ताकि स्लेश को खोज और प्रतिस्थापित करने के लिए वर्णों के रूप में आसानी से उपयोग किया जा सके।

6
sed '$!{:a;N;s/\n/\t/;ta}' file 
+1

क्या आप कृपया जिस कमांड का उपयोग कर रहे हैं उसके बारे में भी समझा सकते हैं? – Vijay

+0

यदि यह अंतिम पंक्ति नहीं है, तो अगली पंक्ति पैटर्न स्थान के साथ जुड़ें, नई लाइन को प्रतिस्थापित करें और फिर शाखा बनाएं: ए और प्रत्येक पंक्ति के लिए ऐसा ही करें – ghostdog74

1
paste -s 

-s कमांड लाइन के क्रम में प्रत्येक अलग इनपुट फ़ाइल की तर्ज के सभी जुटना। प्रत्येक इनपुट फ़ाइल में अंतिम पंक्ति को छोड़कर प्रत्येक पंक्ति के न्यूलाइन चरित्र को टैब वर्ण के साथ प्रतिस्थापित किया गया है, जब तक अन्यथा -d विकल्प द्वारा निर्दिष्ट नहीं किया जाता है।

0

आप अपने sed स्क्रिप्ट के साथ लगभग देखते हैं, तो आप सिर्फ करने के लिए इसे बदलने के लिए आवश्यकता होगी:

sed -e "s/\n/\t/g" 

\ बचने के लिए पर्याप्त है, तो आप _ जोड़ने की जरूरत नहीं है और आप की जरूरत है g से पहले / को अंत में बताएं कि यह स्क्रिप्ट का अंतिम भाग है।

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

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