শেড - জায়গায় একটি মিলিত লাইনে একটি অক্ষর প্রতিস্থাপন করবেন?


21

এই লাইনের মতো একটি ফাইল রয়েছে:

# lorem ipsum blah variable

আমি #একই লাইনে (মন্তব্য) অক্ষরটি স্থানটিতে নির্দিষ্ট স্ট্রিংয়ের সাথে মুছে ফেলতে চাই । কি sedএই জন্য ভাল?

আমি এই শর্তাধীন কাজ করতে সংগ্রাম করছি। আমার এটি করার একটি "আনাড়ি" উপায় আছে; আমি ম্যাচিং লাইন সংখ্যা জানতে পারেন awkবা sedএবং তারপর একটি পৃথক মধ্যে এই নম্বর ব্যবহার sedকমান্ড, কিন্তু আমি বিশ্বাস করি যে এই অনেক ভালো ভাবে সম্পন্ন করা যাবে।

উত্তর:


36

রেখাগুলি পরিচালিত হওয়ার জন্য নির্বাচিত হিসাবে আপনি যে স্ট্রিংটি সন্ধান করছেন তা ব্যবহার করুন:

sed '/ipsum/s/#//g'

/ipsum/"ipsum" ধারণকারী লাইনগুলি নির্বাচন করে এবং কেবল এই লাইনে অনুসরণ করা কমান্ড (গুলি) কার্যকর করা হয়। আপনি আরও কমান্ড চালানোর জন্য ব্রেস ব্যবহার করতে পারেন use

/ipsum/{s/#//g;s/@/-at-/g;}

4
আমি রাজী; এটি সেরা উত্তর (যদিও একমাত্র নয়)। মন্তব্যসমূহ: (1) 's/#//g'মুছে ফেলা হবে সব# লাইনে অক্ষর। যদি আপনি যা চান তা না হলে, মুছে ফেলুন g(যার অর্থ "গ্লোবাল")। (২) জায়গায় কোনও ফাইল সম্পাদনা করতে (প্রশ্নে জিজ্ঞাসা করা হয়েছে), ব্যবহার করুন sed -i
জি-ম্যান

2
(৩) বাস্তব-জগতের পরিস্থিতি হিসাবে, আপনি যদি কোনও লাইন অন-মন্তব্য করতে চান, তবে আপনি sed -i '/ipsum/s/#[[:space:]]*//'অবিলম্বে নিম্নলিখিত কোনও স্থান এবং ট্যাবগুলি পরিত্রাণ পেতে, ব্যবহার করতে চাইতে পারেন #। (৪) আপনি #লাইনের প্রথম অ-ফাঁকা অক্ষর তা যাচাই করার বিষয়টিও বিবেচনা করতে পারেন । বর্তমান কমান্ডটি #লাইন থেকে মুছে ফেলবে prompt "Enter # of ipsums:"
জি-ম্যান

1
@ জি-ম্যান - দুর্দান্ত সংযোজন! আপনার দ্বিতীয় পিটি (নেতৃস্থানীয় স্থান), কি সম্পর্কে: sed -i '/ipsum/s/^#[[:space:]]*//'!? ( ^লাইনের $শেষের জন্য, রেখার সূচনাটি চিহ্নিত করে) - কমপক্ষে গ্নু সেডে ...
জেরেমি ডেভিস

1
@ জেরেমি ডেভিস: হ্যাঁ, আপনি রেজেক্সটি লাইনটির শুরুতে অ্যাঙ্কর করতে পারেন^ তবে এটি ভুল হবে। আমি প্রায়শই কোডের #ঠিক আগে তাত্ক্ষণিক কোড লাগিয়ে ইনডেন্ট কোডটি মন্তব্য করি , তাই #ইন্ডিটেড হয়। আমি সন্দেহ করি যে আমি একমাত্র ব্যক্তি যিনি এটি করেন।
জি-ম্যান

1
@ জি-ম্যান - আহ হ্যাঁ, অবশ্যই! ধন্যবাদ, আমি এটি বিবেচনা করি নি। আপনার কাছে মধ্যবর্তী হোয়াইটস্পেস জন্য চেক করতে চান চাই তাই ^& #, তাই আরো ভালো কিছু: /ipsum/{/^[[:space:]]*#/s/#[[:space:]]*//}। তবুও এটি কোথায় রয়েছে তার উপর নির্ভর করে #এটি এখনও সমস্যার কারণ হতে পারে (যেমন যে ভাষাগুলিতে হোয়াইটস্পেস ইনডেন্টেশন / বিচ্ছেদ ব্যবহার করা হয়)।
জেরেমি ডেভিস

7
$ cat input.txt
# lorem ipsum blah variable
# lorem ipsum blat variable
# lorem ipsum blow variable
# lorem ipsum blip variable
# lorem ipsum blue variable

তারপর:

$ sed 's|# \(.*blue.*\)|\1|' input.txt

দেয়:

# lorem ipsum blah variable
# lorem ipsum blat variable
# lorem ipsum blow variable
# lorem ipsum blip variable
lorem ipsum blue variable

এটি নিম্নলিখিত হিসাবে কাজ করে:

sবলে sedএটি কি রেগুলার এক্সপ্রেশন খুঁজে বের করে প্রতিস্থাপন করা উচিত নয়।

প্যাটার্নটি # \(.*blue.*\)যা ভেঙ্গে যায়: একটি স্থান পরে একটি হ্যাশ সন্ধান করুন। বন্ধনী ( \() গ্রুপিং শুরু করে। .*blue.*এর blueআগে এবং পরে যে কোনও কিছুর সাথে শব্দ । পরবর্তী বন্ধনী ( \)) গ্রুপিং বন্ধ করে।

প্রতিস্থাপনটি হ'ল \1প্রথম গ্রুপিং বন্ধনীর সামগ্রীর পিছনে উল্লেখ।


3

আপনি এক্স মোডে ভিম ব্যবহার করতে পারেন:

ex -sc '/ipsum/s/#//|x' file
  1. s বিকল্প

  2. x সংরক্ষণ করেন এবং বন্ধ করেন


যে বেশ শান্ত. আমি সে সম্পর্কে জানতাম না! টিবিএইচ, আমি নিশ্চিত নই যে এটি এই প্রশ্নের সেরা উত্তর (আইএমও শীর্ষস্থানীয় সেড উত্তরটি একটি) তবে এটি এখনও খুব দুর্দান্ত! পোস্ট করার জন্য ধন্যবাদ।
জেরেমি ডেভিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.