আমি কীভাবে সমস্ত ASCII অক্ষরের জন্য গ্রেপ করব?


359

আমার বেশ কয়েকটি খুব বড় এক্সএমএল ফাইল রয়েছে এবং আমি লাইনগুলিতে সন্ধানের চেষ্টা করছি যেগুলি অ-এসসিআইআই অক্ষরযুক্ত। আমি নিম্নলিখিত চেষ্টা করেছি:

grep -e "[\x{00FF}-\x{FFFF}]" file.xml

তবে রেখায় নির্দিষ্ট রেঞ্জটিতে একটি অক্ষর রয়েছে কিনা তা বিবেচনা না করেই ফাইলের প্রতিটি লাইন প্রদান করে।

আমার কি সিনট্যাক্সটি ভুল আছে বা আমি অন্য কিছু ভুল করছি? আমি চেষ্টা করেছি:

egrep "[\x{00FF}-\x{FFFF}]" file.xml 

(প্যাটার্নটির চারপাশে একক এবং ডাবল উভয় উদ্ধৃতি সহ)


এএসসিআইআই অক্ষর কেবল একটি বাইট দীর্ঘ, তাই যদি ফাইল ইউনিকোড না থাকে তবে 0xFF এর উপরে কোনও অক্ষর থাকতে হবে না।
zdav

আমরা কীভাবে F xFF এর উপরে যাব? গ্রেপ একটি "গ্রেপ: অক্ষর শ্রেণিতে ক্রম ছাড়িয়েছে" ত্রুটি দেয়।
মুদিত জৈন

উত্তর:


493

আপনি কমান্ডটি ব্যবহার করতে পারেন:

grep --color='auto' -P -n "[\x80-\xFF]" file.xml

এটি আপনাকে লাইন নম্বর দেবে, এবং অ-অসি চরগুলি লাল বর্ণিত করবে।

কিছু সিস্টেমে আপনার সেটিংসের উপর নির্ভর করে উপরেরগুলি কাজ করবে না, তাই আপনি বিপরীতক্রমে গ্রেপ করতে পারেন

grep --color='auto' -P -n "[^\x00-\x7F]" file.xml

এছাড়াও নোট করুন, গুরুত্বপূর্ণ বিটটি হ'ল -Pপতাকা যা সমান --perl-regexp: তাই এটি পার্লকে নিয়মিত প্রকাশ হিসাবে আপনার নিদর্শনটির ব্যাখ্যা করবে। এটিও বলে

এটি অত্যন্ত পরীক্ষামূলক এবং গ্রেপ-পি অযৌক্তিক বৈশিষ্ট্যগুলি সম্পর্কে সতর্ক করতে পারে।


42
এটি BSD grep(OS X 10.8 মাউন্টেন সিংহ) তে কাজ করবে না কারণ এটি Pবিকল্পটিকে সমর্থন করে না ।
বাসটিয়ান এম ভ্যান ডি ওয়েয়ার্ড

20
আমার শেষ মন্তব্যটি আপডেট করার জন্য, জিএনইউ সংস্করণটি grepহোমব্রাবির dupesলাইব্রেরিতে পাওয়া যাবে (ব্যবহার সক্ষম করুন brew tap homebrew/dupes):brew install grep
বাসটিয়ান এম ভ্যান ডি ওয়েয়ার্ড

48
@ বাসতিয়ানভ্যানডিউয়ার্ড সঠিক, ওএসএক্স ১০.৮-তে গ্রেপ আর পিসিআরই ("পার্ল-সামঞ্জস্যপূর্ণ নিয়মিত অভিব্যক্তি") সমর্থন করে না কারণ ডারউইন এখন জিএনইউ গ্রেপের পরিবর্তে বিএসডি গ্রেপ ব্যবহার করে। পরিবর্তে dupesগ্রন্থাগারটি ইনস্টল করার একটি বিকল্প হ'ল pcre: brew install pcre... এর অংশ হিসাবে, আপনি pcregrepইউটিলিটি পাবেন যা আপনি নীচের হিসাবে ব্যবহার করতে পারেন:pcregrep --color='auto' -n "[\x80-\xFF]" file.xml
pvandenberk

15
ম্যাক brewব্যবহারকারীদের জন্য, জিএনইউর কোর্টিলগুলি ইনস্টল করা যেতে পারে brew install coreutils। এটি আপনাকে একটি 'g' এর সাথে পূর্বনির্ধারিত প্রচুর GNU সরঞ্জাম দেবে - এই ক্ষেত্রে ব্যবহার করুন ggrep। সিস্টেম-নির্দিষ্ট ম্যাক স্ক্রিপ্টগুলি এখন BSD গ্রেপের উপর নির্ভরশীল, কারণ এটি সিস্টেমের ইউটিলিটি প্রতিস্থাপনের ফলে উত্পন্ন সমস্যাগুলি এড়ানো উচিত।
জোয়েল পুররা

22
এটি ag "[\x80-\xFF]" fileআপনাকে কেবল ইনস্টল করতে হবে এমন ম্যাকের জন্য সূক্ষ্মভাবে কাজ করেthe_silver_searcher
slf

123

উপরের সমাধানগুলির বেশিরভাগ সমাধান যেমন-অ-এসসিআইআই অক্ষরগুলির বাইট সীমা সম্পর্কে ধারণা অনুমান করার পরিবর্তে, এটি ASCII অক্ষরের প্রকৃত বাইট পরিসর সম্পর্কে স্পষ্ট হওয়া আইএমও থেকে কিছুটা ভাল।

উদাহরণস্বরূপ প্রথম সমাধানটি হয়ে উঠবে:

grep --color='auto' -P -n '[^\x00-\x7F]' file.xml

(যা মূলত হেক্সাডেসিমাল এএসসিআইআই ব্যাপ্তির বাইরে যে কোনও চরিত্রের জন্য গ্রেপস: \ x00 থেকে \ x7F পর্যন্ত)

মাউন্টেন সিংহের উপর যা কাজ করবে না (বিএসডি গ্রেপগুলিতে পিসিআরই সমর্থন না থাকায়) , তবে pcreহোমব্রিউয়ের মাধ্যমে ইনস্টল করা থাকলে নীচেরগুলিও ঠিক একইভাবে কাজ করবে:

pcregrep --color='auto' -n '[^\x00-\x7F]' file.xml

যে কোনও কল্যাণ বা ধারণা যে কেউ ভাবতে পারে?


9
এটি প্রকৃতপক্ষে আমার পক্ষে কাজ করেছিল যেখানে উপরের সমাধানগুলি ব্যর্থ হয়েছিল। এম $ ওয়ার্ড এস্ট্রোফেসগুলি খুঁজে পাওয়া সহজ ছিল না!
AlbertEngelB

2
আপনার যদি বাশ-সামঞ্জস্যপূর্ণ শেল থাকে তবে পিসি-গ্রেপ কাজ করে না, LC_COLLATE=C grep $'[^\1-\177]'কাজ করে (নাল বাইট ছাড়াই ফাইলগুলির জন্য)
idupree

2
এই সমাধানটি উপরের বিষয়গুলির চেয়ে আরও ধারাবাহিকভাবে কাজ করছে বলে মনে হচ্ছে।
0xcaff

1
"[\ X80- \ xFF]" ব্যবহার করে এই সমস্তটি মিস করে আমার ইউটিএফ 8 ফাইলে কানজি, সিরিলিক এবং ট্র্যাডিশনাল চাইনিজ বাছাই করতে আমাকে এটি ব্যবহার করতে হয়েছিল।
বকরার 1177125

1
প্রোটি এটি দুর্দান্তভাবে কাজ করেছে যখন অন্যান্য বিকল্পগুলি দুর্দান্ত ছিল তবে দুর্দান্ত ছিল না। এখনও অবধি কোন কনস খুঁজে পাওয়া যায় নি।
jwpfox

67

নিম্নলিখিতটি আমার পক্ষে কাজ করে:

grep -P "[\x80-\xFF]" file.xml

নন-এএসসিআইআই অক্ষর 0x80 থেকে শুরু হয় এবং বাইটগুলি দেখার সময় 0xFF এ যান। গ্রেপ (এবং পরিবার) আপনি চান বলে মনে হচ্ছে রেগেক্স ম্যাচের জন্য একক সত্তায় একত্রে একাধিক বাইট অক্ষর মার্জ করার জন্য ইউনিকোড প্রসেসিং করবেন না। -Pআমার, grep বিকল্পটি ব্যবহার করতে পারবে \xddচরিত্র ক্লাসের বেরিয়ে কি আপনি চান সম্পন্ন করার জন্য।


1
একাধিক ফাইলের মাধ্যমে কীভাবে এটি কল করতে হবে তা অবিলম্বে না জানার জন্য দেখার জন্য, কেবল চালান: সন্ধান করুন। -নাম * .xML | xargs গ্রেপ -পি "[80 x80- \ xFF]"
ডেভিড মোহুন্দ্রো

1
এটি কোনও ম্যাচ ফেরায় তবে চরিত্রটি কী এবং এটি কোথায় রয়েছে তার কোনও ইঙ্গিত পাওয়া যায়নি। চরিত্রটি কী তা কীভাবে দেখা যায় এবং এটি কোথায়?
ফাহিম মিঠা

"-N" যুক্ত করার ফলে লাইন নম্বরটি দেওয়া হবে, অতিরিক্তভাবে অ-দৃশ্যমান অক্ষরগুলি টার্মিনালে একটি ব্লক হিসাবে প্রদর্শিত হবে: গ্রেপ-এন-পি "[\ x80- \ xFF]" file.xML
fooMonster

4
হ্যাঙ্গুল কোরিয়ান নিয়ে আমার সমস্যা হচ্ছে: echo '소녀시대' | grep -P "[\x80-\xFF]"আমার জন্য কিছুই ফিরিয়ে দেয় না - অন্য কেউ নিশ্চিত করতে পারেন? (জিএনইউ
গ্রেপ

এখানে @frabjous একই, কিন্তু বিপরীত কাজ grepping: echo '소녀시대' | grep -P "[^\x00-\x7F]"। বা কেবল the_silver_searcher@ এসএলএফ দ্বারা নির্দেশিত হিসাবে ব্যবহার করুন :echo '소녀시대' | ag "[\x80-\xFF]"
psmith

55

পার্ল ইন

perl -ane '{ if(m/[[:^ascii:]]/) { print  } }' fileName > newFile

1
OSX10.11 আমি এই যা আসলে কাজ করে খুঁজে পাওয়ার আগে কয়েকটি, grep + + Regex সমাধান চেষ্টা ছিল উপর
SG

ওএসএক্স সমাধানটি @ এসজি শেয়ার করার জন্য যত্নশীল ?!
ভূগোলিক

উপরের পার্ল লিপিটি হ'ল আমি যে সমাধানটির বিষয়ে কথা বলছি
সাগ

5
perl -lne 'print if /[^[:ascii:]]/' file.xml
নাভিদ

43

সহজ উপায় হ'ল একটি ASCII অক্ষরকে সংজ্ঞা দেওয়া ... এমন একটি চরিত্র হিসাবে যা কোনও ASCII চরিত্র নয়।

LC_ALL=C grep '[^ -~]' file.xml

^প্রয়োজনে একটি ট্যাব যুক্ত করুন ।

সেট করা LC_COLLATE=Cঅনেক লোকেলের চরিত্রের ব্যাপ্তিগুলির অর্থ সম্পর্কে বাজে আশ্চর্য এড়ায়। LC_CTYPE=Cএকক-বাইট অক্ষরগুলির সাথে মেলে সেটিংটি প্রয়োজনীয় - অন্যথায় বর্তমান আদেশটি এনকোডিংয়ে অবৈধ বাইট অনুক্রম মিস করবে। সেটিং LC_ALL=Cপুরোপুরি লোকাল-নির্ভর প্রভাবগুলি এড়িয়ে চলে।


Tcsh সহ রেডহ্যাট .4.৪ এ, আমাকে <<< এনভি এলসি_কোলেট = সি গ্রেপ-এন '[^ - ~]' file.xML >>> ব্যবহার করতে হয়েছিল। আমি লাইন নম্বর পেতে যোগ করা।
ddevienne

আমার জন্য echo "A" | LC_COLLATE=C grep '[^ -~]'একটি ম্যাচ
ফেরায়

1
@ ফ্রেবজৌস আপনার যদি থাকে তবে LC_ALL=en_US.UTF-8সেটি LC_COLLATEসেটিংসকে ট্রাম্প করে । আপনার পরিবেশে এটি থাকা উচিত নয়! LC_ALLসাধারণত কোনও নির্দিষ্ট লোকাল ব্যবহার করার জন্য কোনও নির্দিষ্ট কাজকে বাধ্য করা C। সমস্ত বিভাগের জন্য ডিফল্ট লোকেল সেট করতে, সেট করুন LANG
গিলস 16'12 এ 'খারাপ হওয়া বন্ধ করুন'

1
প্রথমে আমি যুক্ত করিনি LC_ALL=C, এটি ম্যাক ওএস এক্স এবং উবুন্টুতে আলাদা আচরণ করে। আমি এই সেটিংটি যুক্ত করার পরে, তারা একই ফলাফল দেয়।
সর্বাধিক পেং

1
এটি একটি ম্যাকের জন্য কাজ করে, অন্য গ্রেপ-ভিত্তিক সমাধানগুলি কাজ করে না।
ম্যাথিয়াস ফ্রিপ

26

এখানে আমি অন্য একটি রূপটি পেয়েছি যা গ্রহণযোগ্য উত্তরের জন্য গ্রেপ অনুসন্ধান থেকে সম্পূর্ণ পৃথক ফলাফল এনেছে [\x80-\xFF]। সম্ভবত এটি অতিরিক্ত অ-অসি অক্ষরগুলি খুঁজে পেতে কারও পক্ষে কার্যকর হবে:

grep --color='auto' -P -n "[^[:ascii:]]" myfile.txt

দ্রষ্টব্য: আমার কম্পিউটারের গ্রেপ (একটি ম্যাক) এর -Pবিকল্প নেই, তাই আমি এর পরিবর্তে brew install grepউপরের কলটি শুরু করেছিলাম ।ggrepgrep


2
এটি এখন পর্যন্ত সেরা উত্তর, কারণ এটি ম্যাকের পাশাপাশি লিনাক্সের পক্ষেও কাজ করে।
tommy.carstensen

লিনাক্সে আমার পক্ষে একমাত্র কাজ করেছে।

9

নিম্নলিখিত কোডটি কাজ করে:

find /tmp | perl -ne 'print if /[^[:ascii:]]/'

/tmpআপনি যে ডিরেক্টরিটির মাধ্যমে অনুসন্ধান করতে চান তার নামটি প্রতিস্থাপন করুন ।


2
ম্যাকের ক্ষেত্রে এটি কাজ করে, তবে বেশিরভাগ গ্রেপ-ভিত্তিক কাজ করে না।
ম্যাথিয়াস ফ্রিপ

9

মুদ্রণযোগ্য অক্ষরগুলির জন্য অনুসন্ধান করা হচ্ছে। TLDR; নির্বাহী সারসংক্ষেপ

  1. নিয়ন্ত্রণের অক্ষর এবং বর্ধিত ইউনিকোড অনুসন্ধান করুন
  2. স্থানীয় সেটিং উদাহরণস্বরূপ LC_ALL=Cগ্রেপ তৈরি করার জন্য প্রয়োজনীয় যা আপনি বর্ধিত ইউনিকোড দিয়ে আশা করতে পারেন do

SO পছন্দসই অ-এস্কি চার সন্ধানকারী:

$ perl -ne 'print "$. $_" if m/[\x00-\x08\x0E-\x1F\x80-\xFF]/' notes_unicode_emoji_test

শীর্ষ উত্তরের হিসাবে, বিপরীত গ্রেপ:

$ grep --color='auto' -P -n "[^\x00-\x7F]" notes_unicode_emoji_test

শীর্ষ উত্তরে হিসাবে কিন্তু সাথে LC_ALL=C:

$ LC_ALL=C grep --color='auto' -P -n "[\x80-\xFF]" notes_unicode_emoji_test

। । আরও । এই সম্পর্কে উদ্দীপক বিস্তারিত:। । ।

আমি মন্তব্যগুলিতে উপরে থাকা হার্ভির সাথে একমত , এটি মুদ্রণযোগ্য অক্ষরগুলির সন্ধান করা প্রায়শই বেশি কার্যকর বা যখন আপনার সত্যিকারের অ-মুদ্রণযোগ্য চিন্তা করা উচিত তখন এটি অ-এসসিআইআই মনে করা সহজ। হার্ভে পরামর্শ দিয়েছেন "এটি ব্যবহার করুন:" [^\n -~]"। ডস পাঠ্য ফাইলগুলির জন্য Add আর যোগ করুন That এটি" [^\x0A\x020-\x07E]" এ অনুবাদ করে এবং সিআর জন্য \ x0D যোগ করে"

এছাড়াও, গ্রেডের সাথে -c (প্যাটার্নগুলির সাথে মিলিত গণনা দেখানো) প্রিন্টযোগ্য অক্ষরের জন্য অনুসন্ধান করার সময় দরকারী কারণ স্ট্রিংগুলির সাথে মেলে টার্মিনালটি বিশৃঙ্খলা করতে পারে।

আমি 0-8 এবং 0x0e-0x1f (0x80-0xff পরিসীমাতে) যোগ করার সন্ধান পেয়েছি এটি একটি দরকারী ধরণ। এটি ট্যাব, সিআর এবং এলএফ এবং আরও একটি বা দুটি অস্বাভাবিক মুদ্রণযোগ্য অক্ষর বাদ দেয়। সুতরাং আইএমএইচও বেশ কার্যকর (যদিও অপরিশোধিত) গ্রেপ প্যাটার্ন এটি হ'ল:

grep -c -P -n "[\x00-\x08\x0E-\x1F\x80-\xFF]" *

আসলে, সাধারণত আপনার এটি করতে হবে:

LC_ALL=C grep -c -P -n "[\x00-\x08\x0E-\x1F\x80-\xFF]" *

ভাঙ্গন:

LC_ALL=C - set locale to C, otherwise many extended chars will not match (even though they look like they are encoded > 0x80)
\x00-\x08 - non-printable control chars 0 - 7 decimal
\x0E-\x1F - more non-printable control chars 14 - 31 decimal
\x80-1xFF - non-printable chars > 128 decimal
-c - print count of matching lines instead of lines
-P - perl style regexps

Instead of -c you may prefer to use -n (and optionally -b) or -l
-n, --line-number
-b, --byte-offset
-l, --files-with-matches

উদাহরণস্বরূপ ব্যবহারের ব্যবহারিক উদাহরণ বর্তমান ডিরেক্টরিতে সমস্ত ফাইল গ্রেপ করতে সন্ধান করে:

LC_ALL=C find . -type f -exec grep -c -P -n "[\x00-\x08\x0E-\x1F\x80-\xFF]" {} + 

আপনি সময়ে গ্রেপ সামঞ্জস্য করতে ইচ্ছুক হতে পারে। যেমন বিএস (0x08 - ব্যাকস্পেস) চর কিছু মুদ্রণযোগ্য ফাইলে বা ভিটি (0x0B - উল্লম্ব ট্যাব) বাদ দিতে ব্যবহৃত হয় used বিইএল (0x07) এবং ইএসসি (0x1 বি) চরগুলিও কিছু ক্ষেত্রে মুদ্রণযোগ্য হিসাবে বিবেচিত হতে পারে।

Non-Printable ASCII Chars
** marks PRINTABLE but CONTROL chars that is useful to exclude sometimes
Dec   Hex Ctrl Char description           Dec Hex Ctrl Char description
0     00  ^@  NULL                        16  10  ^P  DATA LINK ESCAPE (DLE)
1     01  ^A  START OF HEADING (SOH)      17  11  ^Q  DEVICE CONTROL 1 (DC1)
2     02  ^B  START OF TEXT (STX)         18  12  ^R  DEVICE CONTROL 2 (DC2)
3     03  ^C  END OF TEXT (ETX)           19  13  ^S  DEVICE CONTROL 3 (DC3)
4     04  ^D  END OF TRANSMISSION (EOT)   20  14  ^T  DEVICE CONTROL 4 (DC4)
5     05  ^E  END OF QUERY (ENQ)          21  15  ^U  NEGATIVE ACKNOWLEDGEMENT (NAK)
6     06  ^F  ACKNOWLEDGE (ACK)           22  16  ^V  SYNCHRONIZE (SYN)
7     07  ^G  BEEP (BEL)                  23  17  ^W  END OF TRANSMISSION BLOCK (ETB)
8     08  ^H  BACKSPACE (BS)**            24  18  ^X  CANCEL (CAN)
9     09  ^I  HORIZONTAL TAB (HT)**       25  19  ^Y  END OF MEDIUM (EM)
10    0A  ^J  LINE FEED (LF)**            26  1A  ^Z  SUBSTITUTE (SUB)
11    0B  ^K  VERTICAL TAB (VT)**         27  1B  ^[  ESCAPE (ESC)
12    0C  ^L  FF (FORM FEED)**            28  1C  ^\  FILE SEPARATOR (FS) RIGHT ARROW
13    0D  ^M  CR (CARRIAGE RETURN)**      29  1D  ^]  GROUP SEPARATOR (GS) LEFT ARROW
14    0E  ^N  SO (SHIFT OUT)              30  1E  ^^  RECORD SEPARATOR (RS) UP ARROW
15    0F  ^O  SI (SHIFT IN)               31  1F  ^_  UNIT SEPARATOR (US) DOWN ARROW

আপডেট: আমাকে সম্প্রতি এটি পুনরায় দেখতে হয়েছিল। এবং, YYMV টার্মিনাল সেটিংস / সৌর আবহাওয়ার পূর্বাভাস BUT এর উপর নির্ভর করে। । আমি লক্ষ্য করেছি যে গ্রেপ অনেকগুলি ইউনিকোড বা বর্ধিত অক্ষর খুঁজে পাচ্ছে না। যদিও স্বজ্ঞাতভাবে তাদের 0x80 থেকে 0xff এর পরিসীমা মিলানো উচিত, 3 এবং 4 বাইট ইউনিকোড অক্ষর মেলেনি। ??? কেউ কি এই ব্যাখ্যা করতে পারেন? হ্যাঁ. @ ফ্রেবজৌস জিজ্ঞাসা করেছেন এবং @ ক্যালান্ডোয়া ব্যাখ্যা করেছেন যে গ্রেপ LC_ALL=Cম্যাচ করার জন্য কমান্ডের জন্য লোকেল সেট করতে ব্যবহার করা উচিত।

যেমন আমার লোকাল LC_ALL=খালি

$ locale
LANG=en_IE.UTF-8
LC_CTYPE="en_IE.UTF-8"
.
.
LC_ALL=

সঙ্গে, grep LC_ALL=খালি ম্যাচ 2 বাইট এনকোড অক্ষর কিন্তু 3 এবং 4 বাইট এনকোড:

$ grep -P -n "[\x00-\x08\x0E-\x1F\x80-\xFF]" notes_unicode_emoji_test
5 copyright c2a9
7:call  underscore c2a0
9:CTRL
31:5 © copyright
32:7 call  underscore

গ্রেপ এর সাথে LC_ALL=Cআপনি যে সমস্ত বর্ধিত অক্ষর চান তা মেলে বলে মনে হচ্ছে:

$ LC_ALL=C grep --color='auto' -P -n "[\x80-\xFF]" notes_unicode_emoji_test  
1:���� unicode dashes e28090
3:��� Heart With Arrow Emoji - Emojipedia == UTF8? f09f9298
5:� copyright c2a9
7:call underscore c2a0
11:LIVE��E! ���������� ���� ���������� ���� �� �� ���� ����  YEOW, mix of japanese and chars from other e38182 e38184 . . e0a487
29:1 ���� unicode dashes
30:3 ��� Heart With Arrow Emoji - Emojipedia == UTF8 e28090
31:5  copyright
32:7 call underscore
33:11 LIVE��E! ���������� ���� ���������� ���� �� �� ���� ����  YEOW, mix of japanese and chars from other
34:52 LIVE��E! ���������� ���� ���������� ���� �� �� ���� ����  YEOW, mix of japanese and chars from other
81:LIVE��E! ���������� ���� ���������� ���� �� �� ���� ����  YEOW, mix of japanese and chars from other

এই পার্ল ম্যাচটি (আংশিকভাবে স্ট্যাকওভারফ্লোতে অন্য কোথাও পাওয়া যায়) বা উপরের উত্তরের বিপরীত গ্রাপ লোকাল নির্ধারণ না করে সমস্ত "অদ্ভুত" এবং "বিস্ময়কর" "অ-অ্যাসিআই" অক্ষর খুঁজে পেয়েছে বলে মনে হচ্ছে:

$ grep --color='auto' -P -n "[^\x00-\x7F]" notes_unicode_emoji_test

$ perl -ne 'print "$. $_" if m/[\x00-\x08\x0E-\x1F\x80-\xFF]/' notes_unicode_emoji_test  

1 ‐‐ unicode dashes e28090
3 💘 Heart With Arrow Emoji - Emojipedia == UTF8? f09f9298
5 © copyright c2a9
7 call  underscore c2a0
9 CTRL-H CHARS URK URK URK 
11 LIVEE! あいうえお かが アイウエオ カガ   ซฌ आइ  YEOW, mix of japanese and chars from other e38182 e38184 . . e0a487
29 1 ‐‐ unicode dashes
30 3 💘 Heart With Arrow Emoji - Emojipedia == UTF8 e28090
31 5 © copyright
32 7 call  underscore
33 11 LIVEE! あいうえお かが アイウエオ カガ   ซฌ आइ  YEOW, mix of japanese and chars from other
34 52 LIVEE! あいうえお かが アイウエオ カガ   ซฌ आइ  YEOW, mix of japanese and chars from other
73 LIVEE! あいうえお かが アイウエオ カガ   ซฌ आइ  YEOW, mix of japanese and chars from other

SO পছন্দসই অ-এস্কি চার সন্ধানকারী:

$ perl -ne 'print "$. $_" if m/[\x00-\x08\x0E-\x1F\x80-\xFF]/' notes_unicode_emoji_test

শীর্ষ উত্তরের হিসাবে, বিপরীত গ্রেপ:

$ grep --color='auto' -P -n "[^\x00-\x7F]" notes_unicode_emoji_test

শীর্ষ উত্তরে হিসাবে কিন্তু সাথে LC_ALL=C:

$ LC_ALL=C grep --color='auto' -P -n "[\x80-\xFF]" notes_unicode_emoji_test

1
@ ক্যালানডোয়াকে ধন্যবাদ এবং 2 টি বাইটের বেশি এনকোড করা অক্ষরকে গ্রেপ কেন মেলে না তার জবাব উত্তর এবং প্রশ্নের উপরে মন্তব্যগুলিতে উদ্ভট। গ্রেপ কমান্ডের আগে LC_ALL = C ব্যবহার করুন।
গাওথে

1
800 টির মত আরোপিতদের নিচে সমাহিত উত্তর পোস্ট করতে বিরক্ত করার জন্য অনেক ধন্যবাদ! আমার সমস্যা ছিল 0x02 চরিত্র। আপনি সেই "ব্যবহারের ব্যবহারিক উদাহরণটি" শীর্ষে রেখে দিতে পারেন, যেহেতু আপনার সমস্যাটি কিনা তা দেখার জন্য আপনাকে সত্যিই পুরো পোস্টটি পড়ার দরকার নেই।
নুমেনন

1
আমি জানি, সত্যিই পুরানো উত্তর, এবং উদ্দীপনাজনক বিশদ, তবে আমার এবং অন্যদেরও সঠিক আশা করি আমি আশা করি। আপনি ঠিক বলেছেন, আমি টিএলডিআর যুক্ত করেছি; শীর্ষে
গাইতে

1

আশ্চর্যজনকভাবে, আমাকে আজ এটি করতে হয়েছিল! আমি পার্ল ব্যবহার করে শেষ করেছি কারণ আমি গ্রেপ / এড্রেপ কাজ করতে পারি না (এমনকি-পি মোডেও)। কিছুটা এইরকম:

cat blah | perl -en '/\xCA\xFE\xBA\xBE/ && print "found"'

ইউনিকোড অক্ষরের জন্য ( \u2212নীচের উদাহরণের মতো ) এটি ব্যবহার করুন:

find . ... -exec perl -CA -e '$ARGV = @ARGV[0]; open IN, $ARGV; binmode(IN, ":utf8"); binmode(STDOUT, ":utf8"); while (<IN>) { next unless /\N{U+2212}/; print "$ARGV: $&: $_"; exit }' '{}' \;

1

কীভাবে একটি ইউনিকোড চরিত্র অনুসন্ধান করতে হবে তা জানা আকর্ষণীয় হতে পারে। এই আদেশ সাহায্য করতে পারে। আপনাকে কেবল ইউটিএফ 8-তে কোডটি জানতে হবে

grep -v $'\u200d'

আমি আসলেই বিশেষজ্ঞ নই, তবে আমি এটি জানার জন্য যথেষ্ট জানি যে এটি কোনও ইউটিএফ 8 প্রতিনিধিত্ব নয়, এটি ইউটিএফ 16, বা সম্ভবত ইউটিএফ 32, বা ইউসিএস 16। একটি 2 বাইট কোডপয়েন্টের জন্য যারা তিনটি একই হতে পারে।
বাক্সিসিমো

1

সমস্ত অ-অ্যাস্কি অক্ষর সন্ধান করা এই ধারণাটি দেয় যে কেউ হয় ইউনিকোড স্ট্রিং সন্ধান করছে বা স্বতন্ত্রভাবে বর্ণিত চরিত্রগুলি ছাঁটাই করতে চাইছে।

প্রাক্তনদের জন্য, এর মধ্যে fileএকটি ব্যবহার করে দেখুন (ভেরিয়েবল অটোমেশনের জন্য ব্যবহৃত হয়):

 file=file.txt ; LC_ALL=C grep -Piao '[\x80-\xFF\x20]{7,}' $file | iconv -f $(uchardet $file) -t utf-8

 file=file.txt ; pcregrep -iao '[\x80-\xFF\x20]{7,}' $file | iconv -f $(uchardet $file) -t utf-8

 file=file.txt ; pcregrep -iao '[^\x00-\x19\x21-\x7F]{7,}' $file | iconv -f $(uchardet $file) -t utf-8

আগের উত্তরগুলিতে উল্লিখিত হিসাবে ভ্যানিলা গ্রেপ এলসি_এলএল = সি ব্যতীত সঠিকভাবে কাজ করে না।

এএসসিআইআই ব্যাপ্তিটি হ'ল x00-x7Fস্থানটি x20, যেহেতু স্ট্রিংয়ের স্পেস রয়েছে negativeণাত্মক পরিসীমা এটি বাদ দেয়।

নন-এএসসিআইআই পরিসীমা x80-xFF, যেহেতু স্ট্রিংয়ের স্পেস রয়েছে সেই ধরণের ধনাত্মক পরিসর এটি যুক্ত করে।

স্ট্রিংটি পরিসরের মধ্যে কমপক্ষে টানা 7 টি অক্ষর বলে মনে করা হয়। {7,}

শেল রিডেবল আউটপুট-এর জন্য, uchardet $fileফাইল এনকোডিংয়ের একটি অনুমান দেয় যা স্বয়ংক্রিয়ভাবে সংক্ষেপণের জন্য আইকনভিতে প্রেরণ করা হয়।


uchardetকমান্ডটি উল্লেখ করার কারণে এটি খুব কার্যকর । যে মাথা আপ জন্য ধন্যবাদ!
bবলldave025
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.