इस tr कमांड में डॉट्स क्या करते हैं: tr… AZ A-ZA-Z <<< “JVPQBOV” (13 डॉट्स के साथ)


18

मैं trकुछ रोट 13 परिवर्तन करने के लिए उपयोग करना चाहता हूं । मैं इस आदेश को खूबसूरती से समझ सकता हूं:

tr A-Za-z N-ZA-Mn-za-m <<< "URYC ZR CYRNFR"

जो आउटपुट है HELP ME PLEASE, लेकिन मैं यह पता नहीं लगा सकता कि यह अन्य कमांड एक ही रोट 13 ट्रांसफॉर्मेशन कैसे उत्पन्न कर सकता है:

tr .............A-Z A-ZA-Z <<< "URYC ZR CYRNFR"

इसलिए मेरे दो सवाल हैं:

  1. दूसरी trकमान के पीछे क्या जादू है ?
  2. दूसरे कमांड को लोअर और अपर केस दोनों के लिए कैसे काम करना है, पहले कमांड की तरह?

मुझे पता है कि 13 डॉट्स हैं। मुझे पता है कि यह कैसे काम करता है। मैनुअल में डॉट्स के बारे में कोई स्पष्टीकरण नहीं है
फ्रेडरिक ओलिवेरा

4
आपको बेहतर आशा थी कि आप अपने इनपुट टेक्स्ट में एक डॉट में नहीं चलेंगे
इरुवर

1
FWIW छोटा रूप tr [.*13].A-Z A-ZA-Zकाम करता है और साथ हीtr .............A-Z A-ZA-Z
irvar

जवाबों:


17

यह निम्नानुसार काम करता है:

SET1-> .............ABCDEFGHIJKLMNOPQRSTUVWXYZ
SET2-> ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLM

तो trअनुवाद कर देगा SET1करने के लिए SET2

यह पहले एक के बराबर है क्योंकि यह 1313 डॉट्स के रूप में इकाइयों द्वारा भी स्थानांतरित हो रहा है ।

निचले मामले के अक्षरों को शामिल करने के लिए, आपको उन्हें SET1समान ऑफसेट के साथ व्यवस्थित करना होगा , अर्थात:

.............ABCDEFGHIJKLMNOPQRSTUVWXYZ..........................abcdefghijklmnopqrstuvwxyz

ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklm

यह बीच का 26 डॉट्स है Zऔर aआधा ऊपरी केस और आधा लोअर केस अल्फाबेट में फैला है। तो trकमांड ही होगी:

tr .............A-Z..........................a-z A-ZA-Za-za-z

14

जैसा कि @Prvt_Yadv उनके जवाब में कहते हैं, यह काम करता है क्योंकि 13 बिंदु हैं।

सेट हैं

First set:  .............ABCDEFGHIJKLMNOPQRSTUVWXYZ
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ

डॉट एक विशेष वर्ण नहीं है, इसलिए यदि आपके इनपुट में डॉट है, तो इसका अनुवाद भी किया जाएगा। trमेरे पास इसके संस्करण में , यह दूसरे सेट में अंतिम संगत चरित्र है, इस मामले में M:

$ echo URYC ZR CYRNFR. | tr .............A-Z A-ZA-Z
HELP ME PLEASEM

(मैं सोच सकता था कि trसेट 2 में पहले मिलान वाले चरित्र का एक अलग संस्करण उपयोग कर सकता है, जो एक देगा A।)

अपने दूसरे प्रश्न का उत्तर देने के लिए , आपको पहले 2 सेट में बाकी बचे अपरकेस अक्षरों का "उपयोग" करने के लिए एक और 13 डॉट्स की आवश्यकता है:

First set:  .............ABCDEFGHIJKLMNOPQRSTUVWXYZ.............
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ

तो आप पैटर्न को दोहरा सकते हैं:

First set:  .............ABCDEFGHIJKLMNOPQRSTUVWXYZ..........................abcdefghijklmnopqrstuvwxyz
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz

जो हमें देता है:

tr .............A-Z..........................a-z A-ZA-Za-za-z

इसलिए:

$ echo Uryc zr cyrnfr | tr .............A-Z..........................a-z A-ZA-Za-za-z
Help me please

व्यक्तिगत रूप से, मुझे लगता है कि आपके प्रश्न में इसे करने का पहला तरीका सरल है!

पहला तरीका इनपुट में किसी भी अन्य वर्ण को रूपांतरित नहीं करता है। उदाहरण के लिए, तुलना करें:

$ echo Uryc zr cyrnfr. | tr .............A-Z..........................a-z A-ZA-Za-za-z  
Help me pleasem

साथ में

$ echo Uryc zr cyrnfr. | tr A-Za-z N-ZA-Mn-za-m
Help me please.

1

ठीक है, इसलिए @Prvt_Yadv के लिए धन्यवाद मैं डॉट्स को समझने में सक्षम था। यहाँ पहला सवाल का जवाब है:

दूसरी trकमान के पीछे क्या जादू है ?

13 डॉट्स बस दूसरे सेट से पहले 13 अक्षरों में मैप किए जा रहे हैं। इसलिए

tr .............A-Z A-ZA-Z निम्नलिखित सेट का उत्पादन करेगा:

SET1 -> .............ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ

यदि आपके इनपुट में डॉट नहीं है, तो आप प्रारंभिक अनुक्रम को छोड़ सकते हैं, क्योंकि आप उन प्रतिस्थापन का उपयोग नहीं करेंगे। फिर सेट बनेंगे:

SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ

लेकिन चूंकि पहले सेट में पहले से ही सभी 26 अक्षर होते हैं और set2 में दोहराए जाने वाले अक्षर होते हैं, इसलिए उन्हें छोड़ दिया जाता है, अंत में बन जाता है

SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLM

जो रोट 13 सबस्टेशन है और पहले कमांड के समान है (यहां कम मामलों से निपटने के अलावा नहीं)। प्रश्न के शीर्षक के लिए एक ही तर्क लागू किया जा सकता है:

tr ...A-Z A-ZA-Z <<< “JVPQBOV” सेट का उत्पादन होगा:

SET1 -> ...ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ

प्रारंभिक अनुक्रम और अनुगामी दोहराए जाने वाले पत्रों के बारे में:

SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> DEFGHIJKLMNOPQRSTUVXWYZABC

कौन सा रोट 3 सबस्टेशन है।

अब दूसरे प्रश्न के लिए:

दूसरे कमांड को लोअर और अपर केस दोनों के लिए कैसे काम करना है, पहले कमांड की तरह?

यह काम करने के लिए आप शुरुआत में डॉट्स की वांछित संख्या डालते हैं, अपने रोट और 26 डॉट्स को ऊपरी अनुक्रम और निचले अनुक्रम के बीच मिलान करते हैं, बस इस तरह:

tr ........A-Z..........................a-z A-ZA-Za-za-z

यह सफलतापूर्वक एक असंवेदनशील सड़ांध पैदा करेगा। यह देखने के लिए कि यह क्यों काम करता है सेट देखें:

SET1 -> ........ABCDEFGHIJKLMNOPQRSTUVXWYZ..........................abcdefghijklmnopqrstuvxwyz
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyzabcdefghijklmnopqrstuvxwyz

डॉट्स मैपिंग और अनुगामी पत्रों को छोड़कर:

SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyz
SET2 -> IJKLMNOPQRSTUVXWYZABCDEFGHijklmnopqrstuvxwyzabcdefgh

अब यह ऊपरी और निचले दोनों मामलों के लिए काम करता है :)

इसका काम करने का एक और तरीका यह है trकि अनुसरण के रूप में दो कमांड का उपयोग करें:

tr .............A-Z A-ZA-Z <<< "ABJ V hqrefgnaq" | tr .............a-z a-za-z

डॉट्स प्रतिस्थापन का उपयोग करने के लिए एक चेतावनी @iruvar द्वारा दी गई थी: यह कमांड अपेक्षित नहीं होगा जब इनपुट स्ट्रिंग में डॉट्स होते हैं। ऐसा इसलिए है क्योंकि डॉट्स को अन्य अक्षरों में मैप किया जा रहा है और प्रतिस्थापन करते समय, trइनपुट मैप को अंतिम मैप किए गए अक्षर में बदल देगा। लेकिन आप वास्तव में डॉट्स की तुलना में किसी अन्य चरित्र का उपयोग कर सकते हैं। इसलिए, यदि आपके trआदेश में डॉट्स का उपयोग करना एक समस्या है, तो आप @इसके बजाय उपयोग कर सकते हैं , उदाहरण के लिए। यह ठीक काम करेगा:

tr @@@@@@@@@@@@@A-Z A-ZA-Z <<< "GUNAX LBH NYY..."

3
मुझे यकीन नहीं है कि आपने कैसे निष्कर्ष निकाला कि "डॉट्स को अक्षरों की एक अनुक्रम से डॉट्स की संख्या से शुरू किया जाता है"; ऐसा बिल्कुल नहीं है। कोई जादू शामिल नहीं है; जैसा कि Prvt_Yadv ने समझाया, दो सेट हैं और trहमेशा की तरह 1 से 2 सेट करने के लिए सेट कर रहा है, लेकिन इस मामले में आपने चरित्र .को मैप किया है A, और यह भी B, और भी ..., और भी M। यह बात नहीं है के बाद से अपने इनपुट एक शामिल नहीं है ., लेकिन अगर यह किया था यह एक में बदल जाते हैं जाएगा M( trका उपयोग करता है पिछले उत्पादन आप किसी दिए गए इनपुट के लिए उल्लेख करें)
माइकल Mrozek

स्पष्टीकरण के लिए धन्यवाद। मैंने अपनी गलतियों को ठीक करने के लिए उत्तर अपडेट किया है :)
फ्रेडरिक ओलिवेरा

1
मैं इस कार्यक्रम के व्यवहार को निर्धारित करने के लिए विज्ञान का उपयोग करने के आपके (प्रारंभिक) प्रयासों की प्रशंसा करता हूं, लेकिन भविष्य में आपको इनका उपयोग करने का प्रयास करने से पहले उन सभी के बीच अंतर करने के लिए यथासंभव विभिन्न और परिकल्पनाओं को डिजाइन करना चाहिए। अन्यथा आप अंत में भ्रमित हो रहे हैं, और बाद के परिणामों को समझाने के लिए अपने मॉडल को कम से कम-परिवर्तन तरीके से अपना रहे हैं, जब तक कि आपके मॉडल का विशेष मामलों का द्रव्यमान न हो।
wizzwizz4
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.