লিনাক্সের একটি ডিলিমিটারের আগে আমি কীভাবে পাঠ্য মুছতে পারি


16

ডিলিমিটারের আগে আমাকে একটি লাইন থেকে পাঠ্য মুছতে হবে।

উদাহরণ স্বরূপ:

(123434): hello::{apple,orange,mango}.

আমার প্রথমে পাঠ্য মুছতে হবে :। অর্থাত (123434)

এই কাজটি করার জন্য লিনাক্সটিতে কোনও আদেশ রয়েছে?


আপনি হয়ত দেখতে চান sedবাawk
পল

এই পাঠ্যটি কোনও ফাইলের অংশ, বা ব্যাশ ভেরিয়েবলের অংশ?
বার্নহার্ড

এটি ফাইলের অংশ।
ব্যবহারকারী 80538

উত্তর:


14

এই sedআদেশটি কৌশলটি করা উচিত। নিম্নলিখিত কমান্ডটি ফাইলটি ওভাররাইট করবে:

sed -i 's/^[^:]*:/:/' file

শুধু আউটপুট মুদ্রণ করতে, -iপতাকা সরান । একটি নতুন ফাইলে আউটপুট রাখার জন্য -iপতাকাটি সরান এবং আউটপুটটিকে পুনর্নির্দেশ করুন:

sed 's/^[^:]*:/:/' file > new_file

লাইনটি
ম্যাজিকটি

যখন আমি উভয় ফাইল থেকে পাঠ্য অপসারণের পরে এসডিফ ব্যবহার করে দুটি ফাইলের তুলনা করি তখন তফাতটি আমার জন্য সরানো পাঠ্য দেখায়। এই কমান্ডটি ফাইলটিকে ওভাররাইট করে বা আউটপুট দেখায়।
ব্যবহারকারী 80538

এটি কাজ করেছে .. উপরের কমান্ডটিতে সাধারণ পরিবর্তন করে আমি কি আমার উদাহরণ থেকে 'হ্যালো' এবং {আপেল, কমলা, আম ext বের করতে পারি?
ব্যবহারকারী 80538

@ ব্যবহারকারী 80538, আপনি যখন এই প্রসঙ্গে এক্সট্র্যাক্ট বলবেন তখন আপনি কী চান তা বলা শক্ত । এটি কি আরও বড় শেল স্ক্রিপ্টের অংশ? আপনি যে বৃহত্তর সমস্যার সমাধানের চেষ্টা করছেন তার বিবরণ সহ আপনি একটি নতুন প্রশ্ন জিজ্ঞাসা করতে চাইতে পারেন।
drs

এটি একই ডেটার সাথে দুটি ফাইলের কেবল সহজ তুলনা তবে কেবল দুটি ফাইলের মধ্যে ডেটা কোথায় পৃথক রয়েছে তা কেবল খুঁজে বের করতে হবে। আমাকে লাইনের প্রতিটি পৃথক বিভাগ পরীক্ষা করতে হবে। স্বতন্ত্র বিভাগের ডেটা বিড়বিড় হতে পারে। {আপেল, কমলা, আমের মতো} আপেল, আম, কমলা} হতে পারে}
ব্যবহারকারী 80538


5

আপনি বেশ সরল বাশ নির্দেশ দিয়ে এটি করতে পারেন :

mytext="(123434): hello::{apple,orange,mango}."

echo ${mytext#*)}

এটি মুদ্রণ করবে : hello::{apple,orange,mango}.। আপনি একইভাবে উপসর্গ এবং প্রত্যয় কাটা করতে পারেন। অধিকন্তু, উপসর্গ এবং প্রত্যয় সংজ্ঞাগুলিতে ওয়াইল্ডকার্ড থাকতে পারে।

উপসর্গটি কাটা - প্রথম উপসর্গের ওয়াইল্ডকার্ড ম্যাচ পর্যন্ত: ${variable#prefix}

উপসর্গটি কাটা - শেষ উপসর্গটি ওয়াইল্ডকার্ড ম্যাচ পর্যন্ত: ${variable##prefix}

প্রত্যয় কাটা - প্রথম প্রত্যয় ওয়াইল্ডকার্ড ম্যাচ অবধি: ${variable%suffix}

প্রত্যয় কাটা - শেষ প্রত্যয় ওয়াইল্ডকার্ড ম্যাচ অবধি: ${variable%%suffix}

এটি প্রথম দর্শনে অস্পষ্ট হতে পারে, নিম্নলিখিত উদাহরণটি দেখুন:

mytext="xAxBxAxBx"
echo ${mytext#*A}    # will print: xBxAxBx
echo ${mytext##*A}   # will print: xBx
echo ${mytext%B*}    # will print: xAxBxAx
echo ${mytext%%B*}   # will print: xAx
echo ${mytext%%C*}   # will print: xAxBxAxBx

শেষ উদাহরণে, প্যাটার্নটি মেলে না, তাই কিছুই কাটা হয় না।


এটি ব্যবহার করা আরও দৃust় হতে চাই echo ${mytext#*:}:। এটি সঠিকভাবে (123)(434): hello::{apple,orange,mango}.এবং এর মতো লাইনগুলি পরিচালনা করবে 123434: hello::{apple,orange,mango}
drs

আপনার উদাহরণে বি এর পরে পাঠ্য পেতে cho {mytext %% B * command কমান্ডটি পরিবর্তন করার কোনও উপায় আছে
ব্যবহারকারী 80538

@ ব্যবহারকারী 80538 হ্যাঁ, বি এর আগে পাঠ্যটি কেবল কাটা, অন্তর্ভুক্ত ;-), অর্থাত: প্রথম বি এর পরে পাঠ্যের জন্য $ {mytext # * B,, এবং দ্বিতীয় বি এর পরে পাঠ্যের জন্য $ $ mytext ## * B
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.