क्या एक लंबी लाइन में लाइन ब्रेक लगाने के लिए कमांड लाइन टूल है?


18

एक लंबी स्ट्रिंग को देखते हुए जिसे सीमित पाठ-चौड़ाई के साथ प्रदर्शित करने की आवश्यकता है, क्या * nix में एक कमांड लाइन टूल है जो सिंगल-लाइन स्ट्रिंग को मल्टी-लाइन स्ट्रिंग में परिवर्तित करता है, जिसमें प्रत्येक पंक्ति किसी दिए गए टेक्स्ट-चौड़ाई से अधिक नहीं है?

उदाहरण के लिए, निम्न स्ट्रिंग दी गई है

$ MYSTRING="Call me Ishmael. Some years ago - never mind how long precisely - having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world."

मैं कुछ इस तरह प्रारूपित करना चाहूंगा:

$ echo $MYSTRING | special-format-command --width=30
Call me Ishmael. Some years ag
o - never mind how long precis
ely - having little or no mone
y in my purse, and nothing par
ticular to interest me on shor
e, I thought I would sail abou
t a little and see the watery 
part of the world.

जवाबों:


24

आप foldकमांड आज़मा सकते हैं :

echo "$MYSTRING" | fold -w 30

2
+1, लेकिन शायद बेहतर रूप में लिखा गया है echo $MYSTRING | fold -w 30, क्योंकि -30सिंटैक्स फोल्ड मैनपेज में दिखाई नहीं देता है ?
ire_and_curses

5
पश्चाताप के लिए, वहाँ भी है fmt। के बीच का अंतर foldऔर fmtवह यह है कि fold, यहां तक कि बंटवारे शब्द निश्चित चौड़ाई में लपेट जाएगा और रिक्त स्थान के साथ लाइनों शुरू हो सकता है। जबकि fmtचौड़ाई के पास या नीचे लपेटेंगे, यह शब्दों को विभाजित नहीं करेगा, लाइनें रिक्त स्थान से शुरू नहीं होंगी और छोटी लाइनें शामिल हो सकती हैं।
बह्मत

5
foldfmtजब -sविकल्प का उपयोग किया जाता है तो समान व्यवहार दिखाई देता है ।
कोरी क्लेन

अजीब, मैं -w विकल्प का उपयोग किया, लेकिन यह चार से विभाजित।
उभयचर

6

यहाँ एक तरीका है sed:

sed 's/.\{30\}/&\
/g'

लेकिन इसका मतलब क्या है?
रिचर्ड

1
@ रिचर्ड नईलाइन ( .\{30\}) को छोड़कर किसी भी कैरेक्टर के 30 को उसी स्ट्रिंग ( &) के साथ रिप्लेस करें , उसके बाद न्यूलाइन।
क्रिस डाउन

6

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

हालाँकि, वहाँ एक और भी बेहतर उपकरण कहा जाता है par(पैरा सुधारक के लिए)। यह सब कुछ कर सकता है जो fmtकर सकता है, लेकिन सटीक आउटपुट प्रारूप को नियंत्रित करने के लिए बहुत अधिक विकल्पों के साथ।

इसके बारे में कई बहुत अच्छी चीजों में से parएक यह है कि यह ईमेल में उद्धृत करने से निपटने के बारे में बहुत स्मार्ट है (यहां तक ​​कि उद्धृत करने के कई स्तर) - बहुत उपयोगी ... मेरे पास मेरा .vimrc सेट है ताकि F5 को हिट करने से बराबर के माध्यम से वर्तमान पैराग्राफ भेजा जा सके।

यदि यह आपके डिस्ट्रो के लिए पैक नहीं है (यह डेबियन और डेरिवेटिव के लिए है, तो शायद दूसरों के लिए भी), par http://www.nicemice.net/par/ पर पाया जा सकता है


"गैर-जीएनयू * निक्स" से, क्या आपका मतलब "वास्तविक" ("यूनिक्स-जैसा" नहीं है) यूनिक्स है? (अन्यथा शांत उपकरण, ऐसा लगता है।)
इमानुएल बर्ग

मेरा मतलब है अब अप्रचलित मालिकाना कबाड़ * निक्स।
कैस

यही मैंने सोचा था, लेकिन आप फिर तारांकन का उपयोग क्यों कर रहे हैं? मैंने सोचा कि हर समय (लिनक्स आदि के लिए) "यूनिक्स-जैसे" टाइप करने के लिए चारों ओर जाना था। (मैं आपको विस्तार से नहीं बता रहा हूं - या अच्छी तरह से, मैं हूं - लेकिन मैं वास्तव में जानना चाहता हूं, मैं आपको इसके लिए प्रेरित नहीं कर रहा हूं।)
इमानुएल बर्ग

*nix"जेनरिक यूनिक्स या यूनिक्स जैसी प्रणाली" कहने का सिर्फ एक तरीका है - यह एक ऐसे समय से है जब यूनिक्स शब्द एटी एंड टी का मालिकाना ट्रेडमार्क था
केस

3

fold -s आपके प्रश्न का सबसे छोटा, सबसे अच्छा उत्तर है।

हालाँकि, उन सभी उद्देश्यों के लिए अच्छा उपकरण कुछ मामलों में हैं, सामान्य तौर पर, आपको अपना संपादक ऐसा करना चाहिए।

Emacs में, आप इसे वैसे भी ट्विक कर सकते हैं जो आप चाहें। मेरे लिए, मैं उपयोग करता हूं visual-line-mode( Wrapमोड लाइन में एक मामूली मोड के रूप में दिखाता है ) क्योंकि सामान्य स्थिति में, मैं नहीं चाहता कि अनुच्छेदों के अंत में लाइन कहीं और टूट जाए।

मैंने सोचा कि मैं इसे करने का तरीका बताऊंगा। यह "रास्ता" नहीं है, बल्कि यह एक तरीका है; जैसा कि मैंने फ़ंक्शन और चर का उल्लेख किया है, आपका तरीका उन्हें एक साथ रखना और उन्हें आपके लिए काम करने के लिए स्वचालित करना है। (यह Emacs है, लेकिन किसी भी पर्याप्त रूप से उन्नत संपादक के लिए, एक समान पोस्ट लिखा जा सकता है।)

मैंने कहा कि मेरे पास जब मैं टाइप करता हूं, तो मेरे पास लिपटी हुई रेखाएं होती हैं, और कभी भी उन्हें मैन्युअल रूप से नहीं तोड़ता। हमेशा की तरह, कुछ अपवाद हैं: उदाहरण के लिए, GNUS यूज़नेट को एक निश्चित चौड़ाई (वर्णों) से परे लाइनों के साथ पोस्ट नहीं भेजेगा। तो, फिर मैं उपयोग करता हूं M-q। Emacs में, M-qकमांड चलाता है fill-paragraph। चर fill-columnभरने के लिए चौड़ाई को नियंत्रित करता है। उदाहरण के रूप में, अगर मैं इसे (एक पंक्ति में) लिखता हूँ

This is a lot of text being written right now. The purpose is to overflow the line so I have have to line break it with M-q.

और फिर मैं का उपयोग करें, मुझे मिलता है

This is a lot of text being written right now. The purpose is to
overflow the line so I have have to line break it with M-q.

के साथ justify-current-line(दो लाइनों के रूप में दो बार), आपको मिलता है

This  is a lot  of text  being written  right now.  The purpose  is to
overflow  the  line  so  I  have  have to  line  break  it  with  M-q.

लेकिन, मैंने पाया है कि लोग चीजों को देखने के लिए शायद ही कभी फोंट का उपयोग करते हैं, इसलिए इसका उपयोग करने का कोई मतलब नहीं था (इसके अलावा मेरे खुद के आनंद के लिए)। यदि आप इसे पसंद करते हैं, तो आप एक ही समय में fill-paragraphभरने और औचित्य के लिए ट्विक कर सकते हैं । आप भी Emacs आपके लिए ऐसा कर सकते हैं, हमेशा, जैसा कि आप टाइप करते हैं auto-fill-mode:। (मैंने पाया कि तनावपूर्ण, लेकिन वह मैं हूं।)

यह बहुत काम की तरह लग सकता है, और यह है; लेकिन एक बार जब आप (इस और 1000 अन्य चीजों के साथ) हो जाते हैं, तो आप वास्तव में उन उपकरणों के साथ काम करने का आनंद ले सकते हैं जो आप उन्हें पसंद करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.