सवाल टर्मिनल से बिना लाइनफीड के फाइल को आउटपुट करने के लिए मैं आउटपुट कैसे पाइप कर सकता हूं?


मेरे पास कमांड है जो परिणाम को प्रत्येक कुंजी प्रेस में न्यूलाइन के रूप में आउटपुट करता है। मैं नहीं चाहता कि इसे नई लाइनों के रूप में फाइल करने के लिए आउटपुट करना पड़े, इसके बजाय मैं इसे लाइनफ़ीड्स के बिना फ़ाइल में भेजना चाहता हूं।

 stdbuf -o0 xinput test 11 >out

क्या यह संभव है?


1
2017-12-24 11:55


मूल


कृपया हमें बताएं कि आप वास्तव में क्या चाहते हैं। इसलिये stdbuf -o0 xinput test 11, मेरे लिए कुछ भी आउटपुट नहीं। हालांकि आप जानते हैं कि आप क्या कर रहे हैं। - c0rp


जवाब:


जोड़ने का प्रयास करें echo -n

stdbuf -o0 xinput test 11 | xargs echo -n > out

अद्यतन करें

जैसा कि मैं आपकी टिप्पणी से समझता हूं, आप केवल लाइनफीड को नहीं हटाना चाहते हैं, बल्कि xinput का उपयोग करके प्रत्येक कीप्रेस पर आउटपुट लॉग भी चाहते हैं।

सबसे पहले सभी इनपुट डिवाइस की जांच करें:

   c0rp@c0rp:~$ xinput --list

यह सभी उपलब्ध इनपुट उपकरणों की एक सूची है

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ ETPS/2 Elantech Touchpad                  id=13   [slave  pointer  (2)]
⎜   ↳ RAPOO RAPOO 2.4G Wireless Device          id=10   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Video Bus                                 id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Sleep Button                              id=9    [slave  keyboard (3)]
    ↳ Asus WMI hotkeys                          id=11   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=12   [slave  keyboard (3)]
    ↳ RAPOO RAPOO 2.4G Wireless Device          id=14   [slave  keyboard (3)]
    ↳ USB2.0 HD UVC WebCam                      id=15   [slave  keyboard (3)]

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

उदाहरण के लिए, मैं वायरलेस कीबोर्ड का उपयोग करता हूं, आईडी = 14:

xinput --test 14

यहां आउटपुट है:

key press   42 
key press   43 
key release 43 
key release 42 
key press   44 

और जो आप चाहते हैं उसे फाइनल करें ...

क्षमा करें, इस चरण पर मुझे एहसास हुआ कि xinput stdout या stderr को रीडायरेक्ट नहीं कर सकता है, यह बस buffered। सबूत लिंक

तो आप जो भी करना चाहते हैं उसे करने का एकमात्र तरीका xinput है:

एक फ़ाइल में xinput लिखें xinput test 11 > out, फिर सभी न्यूलाइन का उपयोग कर प्रतिस्थापित करें tr

tr -d '\n' < yourfile.txt

या यदि यह काम नहीं करता है तो डॉस / विंडोज लाइन के अंत के लिए इसका उपयोग करें

tr -d "\n\r" < yourfile.txt

2
2017-12-24 13:05



मुझे नहीं पता क्यों, यह फाइल को नहीं लिखता है। पाठ आउटपुट फ़ाइल खाली है। - kenn
मैं जवाब अद्यतन करता हूँ - c0rp
आपकी टिप्पणी के लिए धन्यवाद, मुझे पहले से ही पता था कि, मैं जानना चाहता हूं कि फ़ाइल में पाइप करते समय यह संभव है या नहीं। आप कहते हैं कि यह संभव नहीं है। मुझे लगता है कि मुझे आपके अंतिम समाधान का सहारा लेना चाहिए। धन्यवाद। - kenn
आपका स्वागत है! आपको भी धन्यवाद। - c0rp


हालांकि आप इसे पाइप करने में सक्षम होना चाहिए tr या भागो tr अंतिम फाइल पर। आप या तो रिक्त स्थान के साथ नई लाइनों को प्रतिस्थापित कर सकते हैं

tr '\n' ' '

या उन सभी को एक साथ हटा दें

tr -d '\n'

उदाहरण के लिए:

stdbuf -o0 xinput test 11 | tr -d '\n' >out

0
2017-12-24 13:12



मैंने आपके आदेश की कोशिश की, यह फ़ाइल को नहीं लिखता है। पाठ आउटपुट फ़ाइल खाली है। - kenn
और बिना tr के आपको यकीन है कि आप आउटपुट प्राप्त करते हैं जैसा आपने इसे ऊपर टाइप किया है? चूंकि टी को सिर्फ नई लाइनों को हटा देना चाहिए। - Julian Stirling
हां यह stdbuf -o0 xinput test 11 >out फाइल करने के लिए आउटपुट लेकिन इसके साथ नहीं stdbuf -o0 xinput test 11 | tr -d '\n' >out - kenn