Coreutils जो अवगत हैं?


16

जब मैंने cutआज उपयोग किया , तो मुझे पता चला कि यह एक चरित्र के रूप में UTF-8 चरित्र का इलाज नहीं करता है, लेकिन 3 वर्ण क्योंकि यह 3 बाइट्स लंबा है।

यह कई उपकरणों के लिए आम तौर पर सच लगता है।

क्या इसके संस्करण coreutilsUTF-8 से अवगत हैं?

मेरा localeआउटपुट:

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

यहाँ है जब cutकाम नहीं करता है

echo 哈哈 | cut -c 2-
��哈

सही आउटपुट होना चाहिए

यदि cut -cमल्टीबाइट पात्रों के साथ काम किया जाता है।


क्या आपने अपना localeठीक से सेट किया ? locale(W / o तर्क) कमांड इनवोकेशन का पढ़ना क्या है ?
एलेक्स

मैंने लोकेल के साथ अपडेट किया है।
चाओ जू

ठीक है, क्या आप अपनी cutकमांड लाइन के कुछ उदाहरण भी जोड़ सकते हैं ?
एलेक्स

इसकी पुष्टि उबंटू 10.04 पर echo ßßßß | cut -c 2--> �ßßß( LANG=en_US.UTF-8)
मैक्सशेल्पीजिग

दुखद बात यह है कि, 3 साल बाद, यह अभी भी Ubuntu 13.10 में सच है ...
डॉ। माइक

जवाबों:


13

GNU कोरुटिल सामान्य रूप से UTF-8 को समझते हैं। उदाहरण के लिए echo 哈哈 | wc -mसही ढंग 3से एक UTF-8 लोकेल में आउटपुट (ध्यान दें कि विकल्प है -m, -cजो ऐतिहासिक कारणों से बाइट्स के लिए नहीं है )।

यह एक बग है cut। के स्रोत कोcut देखते हुए , cutपात्रों पर बस लागू नहीं किया जाता है: -cविकल्प को एक पर्याय के रूप में माना जाता है -b

वर्कअराउंड awk का उपयोग करना है। GNU awk copes UTF-8 के साथ ठीक है।

awk '{print substr($0,2,length)}'

8
यह एक Bugreport दाखिल करने के लायक होगा (भले ही यह एक डुप्लिकेट होने के नाते समाप्त हो जाए), वास्तव में इस तरह के कीड़े को ठीक करने के लिए, बल्कि बेवकूफ हैक्स और खिलौना उपयोगिताओं को जोड़ने के लिए जो किसी को भी ज़रूरत नहीं है ...
R .. GitHit STOP को

3

यह आपके बिल्ड / संस्करण में एक बग जैसा दिखता है coreutils। मैं Ubuntu 10.10 Maverick Meerkat पर इसे पुन: प्रस्तुत कर सकता हूं लेकिन Fedora 15 पर नहीं।

[पैच @ होलोसिन ~] $ बिल्ली / आदि / फेडोरा-रिलीज़ 
फेडोरा रिलीज़ 15 (लवलॉक)
[पैच @ होलोसिन ~] $ rpm -q coreutils
coreutils-8.10-2.fc15.x86_64
[पैच @ होलोसिन ~] $ गूंज oc | कट-सी 2-
哈
[पैच @ होलोसिन ~] $ सुडो चुरोट / मेंट / मेवरिक
रूट @ होलोसिन: / # grep DISTRIB_DESC / etc / lsb-release
DISTRIB_DESCRIPTION = "उबंटू 10.10"
root @ holocene: / # dpkg-query -s coreutils | grep संस्करण
संस्करण: 8.5-1ubuntu3
रूट @ होलोसिन: / # इको ​​hol | कट-सी 2-
哈

यदि आप भी उबंटू का उपयोग कर रहे हैं, तो आप coreutilsनिम्नलिखित कमांड को चलाकर उबंटू के पैकजियों को बग रिपोर्ट कर सकते हैं :

apport-bug coreutils

अपडेट: गाइल्स टिप्पणियों में बताते हैं कि यह एक बग है जो coreutilsकि फेडोरा के अपस्ट्रीम संस्करण में है। आप अपने पैच को यहां पा सकते हैं यदि आप इसे काम करने के लिए खुद को पैच करने की कोशिश करना चाहते हैं।


मैंने सिर्फ स्रोत को देखा, और यह एक अपस्ट्रीम बग है जिसे फेडोरा ने स्पष्ट रूप से पैच किया था। अपस्ट्रीम स्रोत बस का -cएक उपनाम बनाता है -b
गिल्स एसओ- बुराई को रोकना '

@ गिल्स: दिलचस्प है। मैं अपने जवाब में फेडोरा के पैच से जुड़ा हुआ हूं, अगर कोई कोशिश करना चाहता है और इसे अपने लिए ठीक करना चाहता है।
पैच

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