अवांछनीय परिवर्तन-रेखा वाले टर्मिनल से एक लंबी एकल-पंक्ति पाठ की प्रतिलिपि बनाएँ


14

locate ... | less एक लंबा रास्ता आउटपुट करता है, जिसे टर्मिनल में कई लाइनों के रूप में दिखाया गया है, हालांकि यह वास्तव में एक ही लाइन है।

मैं माउस के साथ पाठ का चयन करके टर्मिनल से पथ की प्रतिलिपि बनाता हूं और Ctrl+ Shift+ मार रहा हूं C। जब मैं इसे टेक्स्ट फाइल में पेस्ट करता हूं, तो मुझे टेक्स्ट में अवांछित परिवर्तन-रेखा मिलती है, ठीक उसी तरह जैसे टर्मिनल में दिखाई जाती है।

लेकिन मुझे याद है कि कभी-कभी मैं locate ... | lessअनचाहे लाइन-परिवर्तन की शुरुआत किए बिना, एक लंबे पथ आउटपुट को कॉपी कर सकता हूं , और कभी-कभी मैं नहीं कर सकता। मुझे एहसास नहीं होता कि मैं कुछ अलग करता हूं।

तो मुझे आश्चर्य है कि कैसे सुनिश्चित करें कि समस्या नहीं होगी? धन्यवाद!

माई ओएस: उबंटू 12.04।

मेरा टर्मिनल: सूक्ति टर्मिनल 3.4.1.1



लेकिन Ctrl + Shift + C कभी भी परिवर्तन-रेखा की नकल के बिना एक लंबी रेखा की प्रतिलिपि बना सकता है। फिर भी विभिन्न समस्याएं, मुझे लगता है।
टिम

तो आपका क्यू इस व्यवहार को नियंत्रित करने के लिए क्यों या कैसे है के बारे में अधिक है?
स्लम

हाँ। मैं शॉर्टकट कुंजी का उपयोग करके टर्मिनल के बाहर पाठ की प्रतिलिपि बनाता हूं (जो मुझे लगता है कि सबसे तेज़ तरीका है), आउटपुट को एक फ़ाइल में निर्देशित करके नहीं
टिम

क्या कुछ और है जब व्यवहार एक तरह से बनाम दूसरा है?
स्लम

जवाबों:


3

टर्मिनल पर प्रदर्शित होने वाली चीज़ों को कॉपी करने के बजाय (केवल स्क्रीन पर जो फिट बैठता है), वास्तविक टेक्स्ट को कॉपी करें। बाह्य उपयोगिताओं में से किसी एक का उपयोग करें xsel या xclip (वे ज्यादातर एक ही विशेषताएं हैं, मैं इस उत्तर में xsel का उपयोग करूंगा) डेटा को एक्स क्लिपबोर्ड से या कॉपी करने के लिए। क्लिपबोर्ड पर कॉपी करने के लिए, मानक इनपुट पर वांछित सामग्री पास करें। क्लिपबोर्ड से चिपकाने पर, सामग्री मानक आउटपुट पर लिखी जाती है।

कम में, |एक कमांड के माध्यम से लाइनों का एक गुच्छा पाइप करने के लिए कमांड का उपयोग करें । पहली पंक्ति पर स्क्रॉल करें जिस पर आप कार्य करना चाहते हैं, mmएक चिह्न सेट करने के लिए लिखें, अंतिम पंक्ति पर स्क्रॉल करें और टाइप करें |mxsel -bऔर दबाएं Enter। दो निशान पूर्वनिर्धारित हैं: ^फ़ाइल की शुरुआत के लिए, फ़ाइल $के अंत के लिए। इस प्रकार, पूरी फ़ाइल की प्रतिलिपि बनाने के लिए, उपयोग करें <|$xsel -b। एक पंक्ति की प्रतिलिपि बनाने के लिए, का उपयोग करें mm|mxsel -bऔर Enter

-bक्लिपबोर्ड के बजाय प्राथमिक चयन पर कॉपी करने का विकल्प निकालें ।


3

इसका वास्तविक व्यवहार निम्नलिखित है:

यदि आप अंदर हैं lessऔर आपके पास बहुत लंबी लाइन वाली फाइल है, तो यदि आप लंबी लाइन को नीचे स्क्रॉल करते हैं और वापस स्क्रॉल करते हैं, तो पूरे टेक्स्ट को कॉपी करते समय आपके पास कई लाइनें होती हैं। उसके बाद, जब आप टर्मिनल के निचले भाग से नीचे की ओर विभाजित लाइनों को स्क्रॉल करते हैं और लाइनों को फिर से स्क्रॉल करते हैं, तो लाइन ब्रेक फिर से हटा दिए जाएंगे।

विज़ुअलाइज़ेशन के लिए:

यहाँ छवि विवरण दर्ज करें


2

यदि आप पाठ को टर्मिनल पर सीधे आउटपुट करते हैं , तो आप अतिरिक्त newlines (लाइन ब्रेक) के बिना आउटपुट की लाइनों को कॉपी कर सकते हैं । टर्मिनल ट्रैक रख सकता है कि वास्तविक रेखा कहां समाप्त होती है।

लेकिन अगर लाइनों द्वारा lessया इसी तरह के pagerकार्यक्रम का उत्पादन किया गया था, तो टर्मिनल को यह नहीं पता है कि नई रूपरेखा कहां हैं। पेजर टर्मिनल को पात्रों की पूरी स्क्रीन के रूप में उपयोग करता है, और टर्मिनल को "इन पात्रों को वहां डाल" और स्क्रॉलिंग जैसे संचालन को बताता है। लेकिन, टर्मिनल के लिए, यह देखने का कोई तरीका नहीं है कि नईलाइनों का इरादा कहाँ है।


2
मैंने पाया कि कभी-कभी मैं लाइन ब्रेक की नकल करता हूं और कभी-कभी मैं नहीं करता। यह समय भर में असंगत है। आज दोनों तब हुए जब मैं locate <something> | lessदो अलग - अलग मामलों में से Ctrl-Shift-c ।
टिम

कम अपनी स्क्रीन को स्वयं खींचता है, सामान्य रूप से, ताकि टर्मिनल यह न देख सके कि लाइनें कहां समाप्त होती हैं। लेकिन कम कॉन्फ़िगर किया जा सकता है वास्तव में स्क्रीन heigt फिटिंग छोटी फ़ाइलों के लिए कुछ भी नहीं है। इसलिए यह संभव है कि मामलों के बीच अंतर यह था कि कम एक अलग मोड में था। (एक नज़र डालें echo $LESS, शायद कम के लिए दिलचस्प विकल्प हैं।)
वोल्कर सीगल

@ यह मुझे वर्षों से परेशान कर रहा है। शायद @ niknah का जवाब कारण बताता है? मैं अक्सर -Sमोड के बीच स्विच करता हूं ताकि शायद यह भी बदतर हो जाए।
डेन ग्रेवेल

1
@ समय: मैंने कुछ ऐसा खोजा है जो आपके OS और कम संस्करण पर सत्य हो सकता है या नहीं भी हो सकता है: प्रतिलिपि का व्यवहार इस बात पर निर्भर करता है कि मैं कम लाइन में लक्ष्य रेखा पर कैसे पहुँचा हूँ। अगर मैं आगे की खोज कर रहा हूं, तो कॉपी में रैपिंग न्यूलाइन्स (यानी, यह मूल लंबी लाइन सामग्री को कॉपी करता है) शामिल नहीं है। हालाँकि, अगर मैंने लक्ष्य रेखा पर पहुंचने के लिए फ़ाइल के माध्यम से पीछे की ओर खोजा है, तो प्रतिलिपि में नईलाइन शामिल हैं और लंबी रेखा को कई अलग-अलग रेखाओं में विभाजित करती है। मेरे लिए मैक और लिनक्स पर संगत लगता है।
erik.weathers

2

में less, यदि आप पाठ की कई पंक्तियों लपेटा और फिर इसे कॉपी करें, यह नीचे एक पंक्ति के रूप में आया हूँ।

यदि आप दबाते हैं PgUpतो एक ही टेक्स्ट को कॉपी करें, यह कई लाइनों के रूप में नीचे आ जाएगा।

PgDnठीक है, तीर ठीक हैं। लेकिन PgUpपाठ को विभाजित करने का कारण बनता है।


यह व्यवहार का वास्तविक कारण नहीं है। मेरा जवाब देखें: unix.stackexchange.com/a/445590/105308
bobbel

0

यदि लक्ष्य कॉपी और पेस्ट करना है, तो मैं catइसके बजाय lessया moreफिर उपयोग करता हूं और टर्मिनल इसे कैप्चर करता है क्योंकि यह वास्तव में प्रदर्शित होने के बजाय है।

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