ডট থাকে না এমন ফাইল থেকে লাইনগুলি কীভাবে মুছবেন?


10

আমার কাছে একটি ফাইল রয়েছে যাতে ইউআরএল সহ ডেটা রয়েছে। তবে বিভিন্ন লাইন রয়েছে যা ইউআরএল নয়। আমি কীভাবে উবুন্টু টার্মিনাল কমান্ড ব্যবহার করে এগুলি সরিয়ে ফেলতে পারি?

রেফারেন্সের জন্য নমুনা ফাইলটি এখানে: নমুনা ডেটা

com.blendtuts/S
°=
com.blengineering.www/:http
±=

আমি আউটপুট পেতে চাই:

com.blendtuts/S
com.blengineering.www/:http

অতিরিক্ত অযাচিত লাইনের কোনও বিন্দু নেই। সুতরাং, আমি বিন্দু ছাড়াই লাইনগুলি সরাতে চাই

উত্তর:


30

সঙ্গে এক উপায় sed

sed '/\./!d' file
  • /\./আক্ষরিক বিন্দু মেলে (এর সাথে পালিয়ে যায় \কারণ অন্যথায় .কোনও চরিত্রের সাথে মেলে )
  • !d মিলিত প্যাটার্ন বাদে সবকিছু মুছুন

আপনি যদি ফাইলটি জায়গায় জায়গায় সম্পাদনা করতে চান তবে -iপরীক্ষার পরে কমান্ডটিতে যুক্ত করুন । (আপনি ফাইলটির স্থানীয় ব্যাকআপ তৈরি .bakকরতে -iপতাকাটিতে যুক্ত sed -i.bak ...করতে পারেন))

sed -i '/\./!d' file

26

আপনি একটি বিন্দু দিয়ে একটি নতুন ফাইলে সমস্ত কিছু গ্রেপ করতে পারেন:

grep "\."  file > newfile

এইভাবে আপনি আপনার পুরানো ফাইলটি সংরক্ষণ করতে পারেন।


10

বা রেখাগুলি রাখুন যাতে বিন্দু রয়েছে ,

sed -ni.bak '/\./p' infile

8

আমি মনে করি awkযে এটিই শেষেরটি দলের জন্য নিখোঁজ রয়েছে:

$ awk -F\. 'NF>1' file
com.blendtuts/S
com.blengineering.www/:http

এটি ক্ষেত্র বিভাজককে বিন্দুতে সেট করে। তারপরে, কমপক্ষে দুটি ক্ষেত্র রয়েছে এমন লাইনগুলি মুদ্রণের বিষয়টি: এর অর্থ কমপক্ষে একটি বিন্দু ঘটে।


3
গ্রিপের মতো একই শিরাতে এটি করা সহজ সরল বিশ্রী সমাধান: awk '/\./' file- এটি কেবল অক্ষর যুক্ত লাইনগুলি মুদ্রণ করা।
ক্রিস মিডলেলি

পছন্দ করুন যেহেতু এই উত্তরটি grepইতিমধ্যে প্রস্তাবিত হিসাবে, তাই আমি কিছু নির্দিষ্ট awkজিনিস নিয়ে যেতে পছন্দ করি :)
ফেডোরকিউ


6

আপনি খুব সহজেই ভিএম দিয়ে এটি করতে পারেন। আপনি যদি কোনও টেক্সট সম্পাদক হিসাবে উইম ব্যবহার করতে স্বাচ্ছন্দ্য বোধ করেন (ফাইলগুলি খোলার, সম্পাদনা এবং লিখন), তবে এটি করুন:

:g!/\./d

আপনি যদি ভিআইএম ব্যবহার করতে স্বাচ্ছন্দ্য বোধ করেন না, বা আপনি এটি কমান্ড-লাইন সরঞ্জাম হিসাবে ব্যবহার করতে চান, আপনি কেবল টার্মিনাল থেকে করতে পারেন:

vim file -c "g!/\./d" -c "wq"

আপনি একটি নতুন ফাইলে সংরক্ষণ করতে এটি সামান্য পরিবর্তন করতে পারেন:

vim file -c "g!/\./d" -c "w newfile" -c "q!"

এটি ভিমের "গ্লোবাল" কমান্ড ব্যবহার করে, যা প্রতিটি লাইনের সাথে একটি রেজেক্স ম্যাচিংয়ের (বা মিলছে না) প্রাক্তন কমান্ড প্রয়োগ করে। এই ক্ষেত্রে, কমান্ডটি "(d) একাদশ", এবং এটি প্রতিটি আদেশে প্রয়োগ করা হবে যা রেজেক্সের সাথে মেলে না\.

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