আইপি ঠিকানার সাথে মেলে আমি কোন নিয়মিত অভিব্যক্তিটি ব্যবহার করতে পারি?


35

নিম্নলিখিত grepসিনট্যাক্সের সাথে আমি কোনও আইপি (সমস্ত kshস্ক্রিপ্ট থেকে ) আইপি ঠিকানাটি মিলাতে চাই

  grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' file

সমস্যা: এটি এমন শব্দ (আইপি) এর সাথে মেলে যা আরও 4 টি অক্টেট রয়েছে:

1.1.1.1.1 

অথবা

192.1.1.1.160

আমি কীভাবে একটি বৈধ আইপি এবং 4 টি অক্টেটের সাথে কেবলমাত্র আইপি ঠিকানার সাথে মেলে পারি ? আমি পার্লও ব্যবহার করতে পারি - এটি যদি grepকাজ না করে তবে একটি লাইন সিনট্যাক্স সমাধান ।


4
999.999.999.999এটিও মিলবে ।
সিউরাস

4
সুতরাং, আপনি কেবল আইপিভি 4 অ্যাড্রেসগুলি গ্রেপ করতে চান, তাই না ?
আরজান

5
প্রযুক্তিগতভাবে, আইপি ঠিকানাগুলি যেমন 192.1.4097লিনাক্স গ্লিবিসি এবং উইন্ডোজ দ্বারা বৈধ এবং স্বীকৃত।
মাধ্যাকর্ষণ

1
আহ, আমি কখনই জানতাম না ! ping 2130706433, OS X এর উপর: PING 2130706433 (127.0.0.1): 56 data bytes
আরজান

1
@ আরজান: 0x7f.1এবং0177.1
মাধ্যাকর্ষণ

উত্তর:


56

এটা চেষ্টা কর:

grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/hosts

থেকে সমস্ত এক্সপ্রেশন সাথে মিলে যায় যা 0.0.0.0থেকে999.999.999.999

সঙ্গে

grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/hosts

আপনি কেবল আইপি ঠিকানা পাবেন

দ্রষ্টব্য: সোলারিসে
সম্ভবত egrep কাজটি করবে।


আমি গ্রেপ চেষ্টা করি কিছুই পান না - :(
জেনিফার

1
@ জেনিফার, আপনাকে বর্ধিত নিয়মিত অভিব্যক্তি সক্ষম করতে হবে: grep -E <pattern> <file>(বা, কেবল ম্যাচগুলি মুদ্রণ করতে:grep -Eo <pattern> <file>
আরজান

এটার মত ? গ্রেপ-ই '\ বি \ ডি {1,3} \। \ ডি {1,3} \। \ ডি {1,3} \। \ ডি {1,3} বি' / ইত্যাদি / হোস্টস
জেনিফার

3
@ ইউডো: আচ্ছা এইগুলি মেলে 1.1.1.1.1তবে এটি .1আউটপুট থেকে শেষটি লুকায় , এটি কীভাবে সাহায্য করতে পারে তা আমি দেখতে পাচ্ছি না।
সিআরস

1
আপনার regexp 10.0.0.1 এর সাথে মেলে না
স্টেফান Seidel

10

এটা কেমন:

perl -MRegexp::Common=net -ne '/($RE{net}{IPv4})/ and print "$1\n"' /etc/hosts

নিস! (এটিও প্রত্যাবর্তন 192.1.1.1.160করে 192.1.1.1, যা আমি প্রশ্নকারীদের পক্ষে ঠিক বলে মনে করি))
আরজান

2
যদি উপযুক্ত আইপি অ্যাড্রেসগুলি সত্যই চাওয়া হয়, তবে এটিই একমাত্র ধরণের সমাধান যা সম্পূর্ণ হওয়ার কাছাকাছি হওয়ার কোনও সম্ভাবনা রয়েছে। আমি যখন প্রশ্নটি দেখেছি তখনই আমি ভেবেছিলাম "আমি দশ ফুটের স্ট্যান্ডার্ড রেজিএক্সপোস পোল দিয়ে এটি স্পর্শ করব না"। গুহাত, সর্বত্র ক্যাভেটস :-)।
ড্যানিয়েল অ্যান্ডারসন

5

দ্য

-w / --word-regexp 

পতাকাটি grepএটি কেবলমাত্র শব্দের সীমানায় মিলবে, এর অর্থ আপনার মিলটি অবশ্যই হয় শ্বেত স্পেস দ্বারা ঘিরে থাকতে হবে বা লাইনের শুরুতে / শেষে শুরু / শেষ হতে হবে!


5

ঠিক 4 টি অক্টেটের সাথে মিল খুঁজে পেতে (1.1.1.1.1 এর মতো জিনিসগুলি বাদ দিয়ে) এটি ব্যবহার করুন:

grep -P '(?<=[^0-9.]|^)[1-9][0-9]{0,2}(\.([0-9]{0,3})){3}(?=[^0-9.]|$)'

এটি কখনই নন-আইপি-ঠিকানা সনাক্ত করতে হবে না। আরও জিনিস যাচাই করার জন্য প্রকাশটি আরও জটিল হতে পারে তবে এটি বেশিরভাগ ক্ষেত্রেই কাজ করা উচিত। এটি পূর্ববর্তী 0 এর সাথে মেলে না কারণ 010.1.12.1 আইপি ঠিকানা লেখার সাধারণ উপায় নয়।



3

কিছুটা জটিল, তবে এটি কার্যকর করা উচিত:

( X='\([0-9]\{1,2\}\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)' ; grep "\([^\.]\|^\)$X\.$X\.$X\.$X\([^\.]\|$\)" file )

127.000.000.001তাহলে কি হবে ? ;-)
আরজান

আমি যতদূর জানি আইপিগুলিতে প্যাডিং জিরো নেই।
সিউরাস

1
হুম, ping 127.000.000.001নিশ্চয়ই আমার ম্যাক এ কাজ করে। তবে তারপরে: আমি কেবল শিখেছি যে এমনকি ping 2130706433খুব একই ফলাফলও পাওয়া যায়। :-) উফ, ping 00127.00000.00000.00001অনুবাদ করুন 87.0.0.1। অদ্ভুত ... নাকি অষ্টাল হতে পারে? হ্যাঁ, অবশ্যই অষ্টাল, সুতরাং আপনারা অনুমান করি যে শীর্ষস্থানীয় শূন্যগুলি সম্পর্কে সঠিক।
আরজান

হ্যাঁ, 00127 (অষ্টাল) = 87 (দশমিক)। অবশ্যই তারা সমস্ত বৈধ আইপি, তবে আমার ধারণা এটি তাদের প্রতিনিধিত্ব করার মানক উপায় নয়। যাইহোক এটি অনুরোধকারী দ্বারা অনুরোধ করা হয়নি।
সিআরস

0

গ্রেপ-ই '^ ((25 [0-5] | 2 [0-4] [0-9] | [1]? [1-9] [0-9]?)।) {3} (25 [ 0-5] | 2 [0-4] [0-9] |? [1] [1-9] [0-9]) $ '

আরনাড বি এর উত্তরের সংস্করণ।

এই অভিব্যক্তিটি লিডিং 0 এর সাথে আইপি ঠিকানার সাথে মেলে না। উদাহরণস্বরূপ, এটি 192.168.1.01 এর সাথে মেলে না This উদাহরণস্বরূপ, এটি 192.168.1.2.3 এর সাথে মেলে না


এটি 127.0.0.1 এর সাথে মেলে না।
ক্রিস চারাবারুক

0

আমি egrep "^([0-9]{1,3}\.){3}[0-9]{1,3}" /etc/hosts একটি লাইনের শুরুতে আইপি অ্যাড্রেসগুলি মেলে ব্যবহার করছি এটি ^আইপি ঠিকানার আগে সাদা স্পেস বা অন্যান্য অক্ষরের অনুমতি ছাড়াই ব্যবহার করা যেতে পারে ।

[0-9]{1,3} --> this matches a number between 1 and 999.
\. --> this is to add the dot.
([0-9]{1,3}\.){3} --> get a number with a dot 3 times.
[0-9]{1,3} --> finally add the fourth number.

0

দীর্ঘ রেজেক্সের একটি সংক্ষিপ্ত সংস্করণ:

egrep '([1-2]?[0-9]{0,2}\.){3,3}[1-2]?[0-9]{0,2}' 

আপনার ওএস সংস্করণে উপযুক্ত হিসাবে গ্রেপ-ই বা egrep ব্যবহার করুন


2
superuser এ স্বাগতম। এই প্রশ্নের ইতিমধ্যে বেশ কয়েকটি ভাল উত্তর রয়েছে। লোকদের মধ্যে পার্থক্য বোঝার জন্য সহায়তা করতে, দয়া করে আপনার উত্তর সম্পাদনা করুন এবং এটি অন্যটির থেকে কী আরও ভাল / আলাদা করে তোলে তা ব্যাখ্যা করুন।
মাতা জুহেজz

এই অভিব্যক্তি 8.8.8.8 echo "8.8.8.8" | grep -Eo '([1-2][0-9]{0,2}\.){3,3}[1-2][0-9]{0,2}'=> কোনও ফলাফল হিসাবে যেমন আইনী
আইপিএস

0

গ্রেপ -ইও '([0-9] {1,3}??) {4}'

উদাহরণ: কার্ল http://korben.info/ip | grep "আইপি দৃশ্যমান Depuis সোম সার্ভুর" | গ্রেপ -ইও '([0-9] {1,3}??) {4}'


0

টিসিএলে একটি আইপি ঠিকানার সাথে মিলে যাওয়ার জন্য নিয়মিত প্রকাশ

একটি "192.168.10.25" সেট করুন

if {[regexp
{^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$} $a]} 
{
    puts "yes"
}

-1

এইআইএক্সে ksh এবং ksh93 এর জন্য আমার জন্য কী কাজ করেছে তা এখানে:

আইপি =

[[$ আইপি == [0-9] @ ("" | [0-9]) @ ("" "| [0-9])। [0-9] @ (" "| [0-9]) @ ( "" | [0-9]) [0-9] @। ( "" | [0-9]) @ ( "" | [0-9])। [0-9] @ ( "" | [0-9]) @ ("" | [0-9])]] && ইকো ঠিক আছে || প্রতিধ্বনি NOK প্রদত্ত আইপি "ফিল্টার" করতে প্যাটার্নটি যা পছন্দ করবে তার উপরেরটি পরিবর্তন করতে পারে mod

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