ডায়াক্রিটিক্স / অ্যাকসেন্ট অক্ষরগুলির সাথে `সন্ধান` কমান্ডের সাহায্যে অনুসন্ধান করুন


8

কখনও কখনও আমি উচ্চারণযুক্ত অক্ষর (সাধারণভাবে ডায়াক্রিটিক), সাধারণত সনাক্ত / এমলোকেট সহ ফাইলগুলি অনুসন্ধান করতে পারি। আমি সেটআপ করতে চাই (হতে পারে /etc/updatedb.conf) সুতরাং এটি আমাকে নির্দিষ্ট ভাষার ম্যাপিং ব্যবহার করে এই বিশেষ অক্ষরগুলি অনুসন্ধান করতে দেয়, উদাহরণস্বরূপ:

a == âàáäÂÀÂÄ
e == êèéëÊÈÉË
i == îïíÎÏ
o == ôöóÔÖ
u == ûùüÛÜÙ
c == çÇ
n == ñ

সুতরাং locate -i liberaciónস্ট্রিং লিবারাকেশন এবং এমনকি লিবারাকেনন সহ ফাইলগুলি অনুসন্ধান করুন ।

নোট এবং অনুমান

  • এবং অন্যরাও হতে পারে: øùúûüýþÿ ÇÈÉÊËÌÍÎÏ ÐÑÒÓÔÕÖØÙÚÛÜÝÞ ßàáâãäåæç èéêëìíîïðñòóôõö øùúûüýþÿ
  • স্প্যানিশ, ফরাসী এবং জার্মান এর মতো রোম্যান্স ভাষার ক্ষেত্রে এটি একটি সাধারণ পরিস্থিতি ।
  • আমি সর্বদা একটি লোকেল 100% ইউটিএফ -8 ব্যবহার করি।
  • আমি বরং নিয়মিত এক্সপ্রেশন ব্যবহার করতে হবে না।
  • একটি প্যাচ হিসাবে ইউনিকোড এর ASCII লিপ্যন্তরগুলি ব্যবহার হতে পারে Unidecode / cUnidecode আছে। বেশিরভাগ এমলোকেট সি-তে লেখা থাকে

সম্পর্কিত

উত্তর:


3

আমরা যদি একবার দেখে নিই updatedb.conf(5), আমরা দেখতে পাব যে কনফিগারেশন আইটেমগুলির সাথে আমরা করার মতো অনেক কিছুই নেই।

সুতরাং আমরা ব্যবহার করে একটি স্ক্রিপ্ট লিখতে যাচ্ছি locate; শেষে আমরা ভালো কিছু চালাতে সক্ষম হয় my-locate.sh liberacionবা my-locate.sh liberâciònতা আমাদের সব সম্ভাব্য সমাহার এনেছে হবে।


চল শুরু করি

আপনার ডাটাবেস হিসাবে যে কোনও জায়গায় আপনি এটি চান আগে প্রথমে একটি সহজ ফাইল তৈরি করুন ~/.mydb; তারপরে আপনার অ্যাকসেন্ট অক্ষরগুলিকে এই ফাইলটিতে যুক্ত করুন:

aâàáäÂÀÂÄ
eêèéëÊÈÉË
iîïíÎÏ
uûùüÛÜÙ
cçÇ
oôöóÔÖóòòò
...
...

তারপরে আমাদের একটি ছোট স্ক্রিপ্ট দরকার যা আমাদের জন্য কাজ করে, আমি একটি সহজ লিখেছিলাম:

#!/bin/bash

# Final search term 
STR=""

# Loop throughout all characters of desired string
for (( i=0; i<${#1}; i++ )); do

  # Split the string in one char
  CH="${1:$i:1}"

  # Find all possible combinations of this char
  CHARS=$(grep "$CH" ~/.mydb)

  # Add an "or" operator between characters
  REG=$(echo "$CHARS" |  sed 's/.\{1\}/&\|/g' )
  REG="($REG)"

  # Append all possible combination of this character
  # to our final search term as an or statement
  if [ "$REG" == '()' ];
  then
   STR=$STR$CH
  else
   STR=$STR$REG
  fi

done

# locate it using regex
locate --regex "$STR$"

এখন এটি আপনার পাঠ্যপুস্তকের কোথাও পছন্দসই নামের সাথে সংরক্ষণ করুন, যেমন: ইন ~/bin। এটি ইতিমধ্যে আপনার পথের পরিবেশে থাকা উচিত।

সর্বোপরি সমস্ত সম্ভাব্য সংমিশ্রণগুলি অনুসন্ধান করার জন্য এই জাতীয় কিছু ব্যবহার করুন।

my-locate.sh liberacion

এই সমস্ত আমার জন্য পাবেন:

~/lab/liberacion
~/lab/liberaciòn
~/lab/liberación
~/lab/liberâciòn
~/lab/liberäciòn
~/lab/libÈrâciòn

আপনি কোনও বিশেষ চরিত্র হিসাবে ব্যাখ্যাটি এড়াতে grep -fবা ব্যবহার fgrepএড়াতে পারেন "$CH", উদাহরণস্বরূপ grep ^যে কোনও লাইনের সাথে মেলে তবে grep -f ^কেবল সেই চরিত্রের সাথে মেলে ^। নিয়মিত এক্সপ্রেশনটি কারুকর্ম করতে অক্ষর শ্রেণি ব্যবহার করা আরও সহজ হতে পারে, REG="[$CHARS]"সম্ভবত আপনার sedআদেশের চেয়ে সম্ভবত সহজ is বিশেষ চরিত্রের জন্য নজর রাখুন যদিও! অন্যথায় একটি ভাল পদ্ধতির। +1
ডেভিড ফোরস্টার

2

এখন এমিলোক্ট 0.26 এর সাথে আমাদের উবুন্টু 18.04+ তে -t --transliterateবিকল্প ( ম্যান পৃষ্ঠাটি দেখুন ) রয়েছে (বিজোড় কাজের প্রয়োজন ছাড়াই):

কিছু পরীক্ষার ফাইল তৈরি করা হচ্ছে:

$ touch liberación liberacion liberaciôn

আপডেট এবং অনুসন্ধান:

$ updatedb
$ locate --transliterate liberacion 
/home/pablo/liberacion
/home/pablo/liberación
/home/pablo/liberaciôn

সুতরাং এখন locate -t liberaciónস্ট্রিং liberacionএবং এমনকি ফাইলগুলির জন্য অনুসন্ধান করুনliberaciòn !

অবশেষে, আমার .bashrc :-) এ একটি উপন্যাস তৈরি করা হচ্ছে

$ alias locate="locate --transliterate"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.