আমি কীভাবে কোনও প্যাটার্ন অবধি সমস্ত কিছু এবং কোনও রেখা থেকে অন্য প্যাটার্নের পরে সমস্ত কিছু মুছতে পারি?


17

নিম্নলিখিত ফাইলটিতে:

স্নাতকোত্তর প্যাচসমূহ আপনি উপস্থাপন করতে পারেন। আপনি যদি আমাদের আইডি ব্যবহার করতে পারেন তবে আল্ট্রাইস ব্যবহার করতে পারেন। মেনেসাস রনকাস

আমি এর আগে consectetuerএবং তার পরে সমস্ত কিছু মুছতে চাই elit

আমার কাঙ্ক্ষিত আউটপুট:

consectetuer adipiscing elit.

কিভাবে আমি এটি করতে পারব?


2
কমান্ড হতে পারে sed। এটি perl, এমনকি খাঁটি বাশও হতে পারে ।
مورু

@ ম্যানুয়েল যদি এই উত্তরগুলির মধ্যে একটির যদি আপনার সমস্যার সমাধান হয় তবে দয়া করে কিছুক্ষণ সময় নিন এবং বাম দিকে চেক চিহ্নটি ক্লিক করে এটি গ্রহণ করুন। এটি প্রশ্নটিকে উত্তর হিসাবে চিহ্নিত করবে এবং স্ট্যাক এক্সচেঞ্জের সাইটগুলিতে ধন্যবাদ প্রকাশ করার উপায়।
টেরডন

উত্তর:


27

আমি সেড ব্যবহার করব

sed 's/^.*\(consectetuer.*elit\).*$/\1/' file

সেড গুলি / সন্ধান / প্রতিস্থাপন / সিনট্যাক্স ডিকোড করেছেন:

  • s/^.*- রেখার ( ^) এর শুরুতে শুরু করে বিকল্প ( কিছু .*) ( ) অবধি ...
  • \( - একটি নামকৃত ব্লক শুরু করুন
  • consectetuer.*elit\.- প্রথম শব্দের সাথে মিলিত করুন, .*শেষ শব্দ পর্যন্ত সমস্ত কিছু ( ) এই ক্ষেত্রে আপনি অনুসরণ করতে চান (পেছনের দিকে (পালানো) বিন্দু সহ)
  • \) - নামকৃত ব্লকটি শেষ করুন
  • .*লাইন ( $) এর শেষের সাথে অন্য সব কিছু মিলিয়ে দিন ( )
  • / - বিকল্প সেকশনটি শেষ করুন
  • \1- উপরের \(এবং \)উপরের মধ্যে নামের ব্লকের সাথে প্রতিস্থাপন করুন
  • / - প্রতিস্থাপন শেষ

1
ভাল উত্তর, তবে আপনার প্রয়োজন নেই ^বা $যেহেতু সেড চেষ্টা করবে এবং দীর্ঘতম ম্যাচটি খুঁজে পাবে। এছাড়াও আপনি পরে বিন্দুটি মিস করতে পারেন elit, প্রয়োজনে আপনি সন্নিবেশ করতে \.পারেন।
asoundmove

2
@ সাউন্ডমোভ "এলিট" -এর পিছনে বিন্দুতে ভাল ক্যাচ। - আপনার চোখ খুব তীক্ষ্ণ আছে! পালানো বিন্দুটিকে প্যাটার্নে অন্তর্ভুক্ত করার জন্য আমি আমার উত্তর আপডেট করেছি। আপনার এটিও সঠিক যে অপরিহার্য ^এবং $প্রয়োজনীয় নয় - আমি সেগুলিকে সেখানে রেখেছিলাম কারণ প্রশ্নকর্তা উল্লেখ করেছেন (মূলত) যে তিনি কিছুটা শিক্ষানবিস এবং এটি অন্যান্য প্রসঙ্গেও সহায়ক হতে পারে।
মাইকভি

আমি সর্বদা আমার প্রয়োজন অনুসারে কপি-পেস্ট করা সেড সমাধানগুলি হ্যাক করে ফেলেছি তবে এই উত্তরটির জন্য ধন্যবাদ আমি মনে করি আমি এখন এটি বুঝতে পেরেছি। দুর্দান্ত উত্তর
টাইলার

7

যদি প্রতিটি লাইনে শুরু এবং শেষ প্যাটার্ন উভয়ই থাকে তবে এটি করার সহজতম উপায়টি grep। প্রতিটি লাইনের শুরু এবং শেষ মোছার পরিবর্তে আপনি কেবল উভয় নিদর্শনগুলির মধ্যে সামগ্রী আউটপুট করতে পারেন। -oজিএনইউতে বিকল্পটি কেবল grepমেলে:

grep -o 'consectetuer.*elit' file

দ্রষ্টব্য: উল্লিখিত হিসাবে, কেবলমাত্র যদি ফাইলের প্রতিটি লাইন এভাবে পার্স করা যায় তবে এটি কাজ করে। এরপরে, এটি সমস্ত সাধারণ ব্যবহারের ক্ষেত্রে 80%।


1

এডাব্লুকে-তে দুটি লুপের জন্য:

$ awk '{for(i=1;i<=NF;i++) {if ($i == "consectetuer") beginning=i; if($i== "elit.") ending=i }; for (j=beginning;j<=ending;j++) printf $j" ";printf "\n"   }' file.txt 
consectetuer adipiscing elit.

এডব্লিউকে এর জিএসব:

$ awk '{gsub(/^.*consectetuer/,"consectetuer"); gsub(/elit.*$/,"elit.");print}' file.txt
consectetuer adipiscing elit.

1

একটি পার্ল উপায়। এটি মূলত মাইকভেরsed উত্তরের মতো:

perl -pe 's/.*(consectetuer.*elit).*./$1/' file

এর -pঅর্থ "প্রদত্ত স্ক্রিপ্ট প্রয়োগের পরে প্রতিটি লাইন মুদ্রণ করুন -e"। s/foo/bar/প্রতিকল্পন অপারেটর হয়; এটি fooদিয়ে প্রতিস্থাপন করা হবে bar। প্রথম বন্ধনী একটি প্যাটার্ন ক্যাপচার করে এবং প্রতিস্থাপনে এটি ব্যবহার করি। প্রথম ক্যাপচার প্যাটার্নটি হ'ল $1, দ্বিতীয় $2এবং আরও অনেক কিছু।

সুতরাং, কমান্ডটি consectetuer( .*consectetuer) অবধি সমস্ত কিছুর সাথে মিলবে , তারপরে elit( .*elit) অবধি এবং তারপরে লাইন ( .*) শেষ হওয়া অবধি সমস্ত কিছুর সাথে মিলিত হবে এবং এটি ক্যাপচারিত প্যাটার্নের সাথে প্রতিস্থাপন করবে।


1

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

এটি ক্রস লাইনগুলির জন্য কাজ করে:

from1=consectetuer; to2=elit; a="$(cat file)"; a="$(echo "${a#*"$from1"}")"; echo "$from1${a%%"$to2"*}$to2"

উদাহরণ:

[xiaobai@xiaobai tmp]$ cat file
1
abc consectetuer lsl

home

def elit dd
2 consectetuer ABC elit
[xiaobai@xiaobai tmp]$ from1=consectetuer; to2=elit; a="$(cat file)"; a="$(echo "${a#*"$from1"}")"; echo "$from1${a%%"$to2"*}$to2"
consectetuer lsl

home

def elit
[xiaobai@xiaobai tmp]$ 

তথ্যসূত্র: শেল প্যারামিটার সম্প্রসারণ


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