কীভাবে একটি শব্দ অন্য শব্দে অনুবাদ করে?


9

আমার একটি ফাইল আছে ma.txtএবং এতে আউটপুট রয়েছে ls -l; যখন আমি trকমান্ডটি চালাব ( tr "nik-pc" "root") আমি এই আউটপুটটি পাই:

nik-pc@nik:~$ cat ma.txt 
total 52
drwxr-xr-x 2 nik-pc nik-pc 4096 Mar 11 11:33 Desktop
lrwxrwxrwx 1 nik-pc nik-pc    2 Mar  8 22:54 di -> hd
drwxr-xr-x 3 nik-pc nik-pc 4096 Mar 13 13:28 Documents
drwxr-xr-x 7 nik-pc nik-pc 4096 Mar 14 18:21 Downloads
drwxr-xr-x 2 nik-pc nik-pc 4096 Mar 11 09:39 dwhelper
-rw-r--r-- 1 nik-pc nik-pc 2134 Mar 13 17:40 hd
-rw-r--r-- 1 nik-pc nik-pc    3 Mar 13 15:34 m
-rw-r--r-- 1 nik-pc nik-pc    0 Mar 17 19:48 ma.txt
drwxr-xr-x 3 nik-pc nik-pc 4096 Mar 13 14:58 Music
drwxr-xr-x 2 nik-pc nik-pc 4096 Mar  5 12:30 Pictures
drwxr-xr-x 2 nik-pc nik-pc 4096 Mar  5 11:44 Public
drwxr-xr-x 2 nik-pc nik-pc 4096 Mar 13 15:58 sd
drwxr-xr-x 2 nik-pc nik-pc 4096 Mar  5 11:44 Templates
drwxr-xr-x 2 nik-pc nik-pc 4096 Mar  5 11:44 Videos
drwxr-xr-x 2 nik-pc nik-pc 4096 Mar 11 11:33 xdm-helper

nik-pc@nik:~$ tr "nik-pc" "root" < ma.txt 
tttat 52
drwxr-xr-x 2 too-tt too-tt 4096 Mar 11 11:33 Desottt
trwxrwxrwx 1 too-tt too-tt    2 Mar  8 22:54 do -> hd
drwxr-xr-x 3 too-tt too-tt 4096 Mar 13 13:28 Dttutetts
drwxr-xr-x 7 too-tt too-tt 4096 Mar 14 18:21 Dtwtttads
drwxr-xr-x 2 too-tt too-tt 4096 Mar 11 09:39 dwhetter
-rw-r--r-- 1 too-tt too-tt 2134 Mar 13 17:40 hd
-rw-r--r-- 1 too-tt too-tt    3 Mar 13 15:34 t
-rw-r--r-- 1 too-tt too-tt    0 Mar 17 19:48 ta.txt
drwxr-xr-x 3 too-tt too-tt 4096 Mar 13 14:58 Musot
drwxr-xr-x 2 too-tt too-tt 4096 Mar  5 12:30 Pottures
drwxr-xr-x 2 too-tt too-tt 4096 Mar  5 11:44 Pubtot
drwxr-xr-x 2 too-tt too-tt 4096 Mar 13 15:58 sd
drwxr-xr-x 2 too-tt too-tt 4096 Mar  5 11:44 Tetttates
drwxr-xr-x 2 too-tt too-tt 4096 Mar  5 11:44 Vodets
drwxr-xr-x 2 too-tt too-tt 4096 Mar 11 11:33 xdt-hetter

প্রথম লাইনে এটি "নিক" কে "খুব" সাথে প্রতিস্থাপন করে এবং "ডেস্কটপ" এর বানান "ডেসোট্ট" হয়ে যায়।

কেন? এর পিছনে যুক্তি কী?


3
info coreutils 'tr invocation'কি trকরে তা আপনাকে বিশদে জানায় ।
নেফেন্টে

4
আপনি কী করার চেষ্টা করছেন? কমান্ডটি আপনি যা করতে বলেছিলেন ঠিক তেমনটি করেছে, তবে আমি অনুমান করি আপনি আসলে এটির nik-pcসাথে প্রতিস্থাপন করতে চান root?
কোস

3
প্রথম পদক্ষেপটি সর্বদা কমান্ডের ম্যান পৃষ্ঠা পরীক্ষা করা হয়।
মোস্তফা অহংগার

1
@DavidZ: লক্ষ্য করুন nরয়েছেন k-pপরিসীমা। প্রথম সেটটিতে একাধিকবার উপস্থিত একটি চরিত্রের ফলাফল POSIX দ্বারা নির্ধারিত।
এইচএমখোলম মনিকা

1
আমি মনে করি আপনার সত্যিকারের যা প্রয়োজন, তা হ'ল sedআদেশ ... ls -l | sed 's/nik-pc/root/'আপনি যা চান তাই করবেন। trএকক অক্ষর রূপান্তর করার জন্য - যেমন। লোয়ার-কেস আপার-কেস, বা ডস-স্টাইলের লাইনশিফ্ট (\ r) থেকে ইউনিক্স-স্টাইল (\ n), বা কিছু ব্যাকস্ল্যাশ (উইন্ডোজ) স্ল্যাশ সহ প্রতিস্থাপনের মতো কিছু। এটি "অযাচিত" অক্ষরগুলিও মুছে ফেলতে পারে, যেমন। সমস্ত সংখ্যা বা সমস্ত বড় হাতের অক্ষর।
বার্ড কোপ্পেরুদ

উত্তর:


16

trএকটি স্ট্রিং চরিত্র অনুসারে অনুবাদ করে। এটি প্রথম সেট থেকে বর্ণগুলি সন্ধান করে এবং তাদের দ্বিতীয় সেটটি ফর্মগুলির দ্বারা প্রতিস্থাপন করে।

আপনি nik-pcপ্রথম সেট হিসাবে ছিল । "কে" থেকে "পি" পর্যন্ত পরিসরের সমস্ত বর্ণগুলিতে trএর k-pঅংশটি প্রসারিত করে , তাই সেটটি সমান niklmnopc

আপনার দ্বিতীয় সেট ছিল root

কি trএখন আছে (মূল্যায়ন) প্রথম সেটে প্রথম অক্ষরের সব ঘটনার অনুসন্ধান ও তাদের দ্বিতীয় সেটের প্রথম অক্ষর প্রতিস্থাপন হয়। সেট 2 এ আর কোনও চরিত্র না থাকলে এটি কেবল তার শেষ চরিত্রটি পুনরাবৃত্তি করে। নীচের টেবিলটি দেখুন:

n --> r
i --> o
k --> o
l --> t
m --> t
n --> t
o --> t
p --> t
c --> t

সুতরাং এখন এটি পরিষ্কার হয়ে গেছে যে কেন "ডেস্কটপ" "ডেসোট্ট" হয়ে যায়। আচরণটি পুরোপুরি সঠিক এবং এইভাবে উদ্দেশ্যে করা হয়েছে।


পরিবর্তে আপনি যা সন্ধান করছেন তা ব্যবহার করে অর্জন করা যেতে পারে sed:

sed 's/nik-pc/root/g' ma.txt

বাক্য গঠনটি হ'ল:

sed 's/SEARCH_PATTERN/REPLACE_STRING/FLAGS' INPUT_FILE

সুতরাং আমরা এটিকে "নিক-পিসি" প্যাটার্নটি অনুসন্ধান করতে এবং পুরো মিলটি "রুট" দিয়ে প্রতিস্থাপন করি। গ্লোবাল প্রতিস্থাপন সক্ষম করতে আমাদের "জি" পতাকা যুক্ত করতে হবে। তা ছাড়া, এটি প্রতিটি লাইন প্রতি প্রথম ম্যাচ প্রতিস্থাপন করবে।


তীরযুক্ত সেই টেবিলটি ব্যাখ্যাটিকে আরও পরিষ্কার করে দেয়, আমি এটি পছন্দ করি। + 1-এড কোনও ব্যবহারকারী সম্ভবত এর সাথে কিছু তৈরি করতে পেরেছিলেনprintf "A\nB\nC\n" | tr 'ABC' '12'
সের্গেই কলডিয়াজহনি

18

trঅক্ষর অনুবাদ করার জন্য, সম্পূর্ণ শব্দের জন্য নয়। এটি সেট অনুবাদ করতে পারেন। আপনার উদাহরণে আপনার প্রথম সংগ্রহের চর হিসাবে "নিক-পিসি" রয়েছে এবং "মূল" অন্যটি another আসলে, k-pএটি একটি ব্যাপ্তি, তাই এতে কে থেকে পি পর্যন্ত সমস্ত অক্ষর অন্তর্ভুক্ত রয়েছে। এটি অক্ষরের সাথে এক এক করে মিলবে, সুতরাং এন r, i থেকে o, k থেকে o তে অনুবাদ করবে এবং 4 র্থ চরের বাইরে অন্য যে কোনও কিছু হবে তা টি হবে। এজন্য আপনি "ডেস্কটপ" "ডেসোট্ট" এ অনুবাদ করেছেন

আপনি এই উদাহরণে আরও স্পষ্ট দেখতে পাচ্ছেন:

$ echo "ABCDEF" | tr "ABCDEF"  "12"                            
122222

এখানে আপনি দেখতে পাচ্ছেন যে tr সেট 1 এর ডি পজিশনে 4 আছে তবে সেট 2 এর কোনও অবস্থান 4 নেই, তাই এটি অনুবাদ করতে হবে শেষ অবস্থান 2 সেটটি ব্যবহার করবে।

আপনি যা করছেন তা হ'ল একটি শব্দের অনুবাদ করে। আপনি যা করতে চান তা হ'ল আরও উন্নত সরঞ্জামগুলি ব্যবহার করা sedবা awk

এই ক্ষেত্রে,

$ ls -l /etc/passwd | awk '{gsub(/root/,"TEST");print}'        
-rw-r--r-- 1 TEST TEST 2575 Feb 29 12:30 /etc/passwd

6
বা সেড এস / নিক-পিসি / রুট / ছা </ p> ma2.txt
ব্রুনি

1
আপনি আমার চেয়ে অনেক দ্রুত ছিলেন @ সার্জ ...: পি
বাইট কমান্ডার

2
@ বাইটকম্যান্ডার আমি সম্ভবত গতিতে জিতেছি, তবে আমি মনে করি আপনার উত্তরটি মানের ক্ষেত্রে জিতেছে
সের্গি কোলোডিয়াজনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.