একটি নির্দিষ্ট লাইন জন্য sed কমান্ড ব্যবহার করে


2

আমার পছন্দসই অবস্থা বিদ্যমান যখন আমি ফাইল একটি কোষ পরিবর্তন করতে চান। উদাহরণ:

ফাইল:

id311    vmName1    state0
id312    vmName2    state0
id313    vmName3    state0

আমি একটি স্ক্রিপ্ট টাইপ করব এবং এই স্ক্রিপ্টটি শুধুমাত্র একটি সারির স্টেট কলাম পরিবর্তন করবে। তাই যদি আমি টাইপ sed -i 's/state0/state1/g' সব state0 হতে হবে state1। আমি শুধুমাত্র এক সারি রাষ্ট্র পরিবর্তন করতে চাই:

ফাইল:

id311    vmName1    state0
id312    vmName2    state1
id313    vmName3    state0 

আমি কিভাবে ব্যবহার করতে পারেন sed ব্যবহারের আইডি সঙ্গে একটি বিশেষ লাইন জন্য কমান্ড? নোট: আইডি অনন্য।

উত্তর:


3

শুধু আগে লাইন নম্বর যোগ করুন: sed '<line number>s/<search pattern>/<replacement string>/

$ sed '1s/state0/XXXX/' file
id311    vmName1    XXXX
id312    vmName2    state0
id313    vmName3    state0

যেহেতু আপনি জায়গায় সম্পাদনা করতে চান, বলুন:

sed -i.bak '1s/state0/XXXX/' file

নোট আমি ব্যবহার করুন .bak পরে -i পতাকা। এই পরিবর্তন সঞ্চালন করা হবে file নিজেই কিন্তু একটি তৈরি হবে file.bak বর্তমান কন্টেন্ট সঙ্গে ব্যাকআপ ফাইল file পরিবর্তন আগে।


একটি পরিবর্তনশীল লাইন নম্বর জন্য পরিবর্তনশীল সাধারণত, পাশাপাশি ডবল কোট এটি বিস্তৃত ব্যবহার করুন:

sed -i.bak "${lineNumber}s/state0/XXXX/" file

ধন্যবাদ কিন্তু এটি আমি মনে করি ফাইল পরিবর্তন করে না। আমি ফাইল লাইন পরিবর্তন করতে চান।
Gefolge

1
@ এজিভেন শুধু জায়গা রাখুন -i আপনার প্রচেষ্টা দেখায় হিসাবে।
fedorqui

আচ্ছা, আমি কিভাবে $ lineNumber মত একটি পরিবর্তনশীল সঙ্গে এই ব্যবহার করতে পারেন?
Gefolge

1
@ এভিভেন আপডেট দেখুন।
fedorqui

2

আমি কিভাবে ব্যবহার করতে পারেন sed ব্যবহারের আইডি সঙ্গে একটি বিশেষ লাইন জন্য কমান্ড? নোট: আইডি অনন্য।

থেকে id গুলি অনন্য, এটি একটি কী হিসাবে প্রথম ক্ষেত্র ব্যবহার করার ধারনা করে:

sed -i '/id312/s/state0/state1/' file

আপনি একটি কমান্ড তৈরি করতে এবং প্যারামিটার হিসাবে আইডি নম্বর এবং ফাইলটি পাস করতে পারেন:

#!/usr/bin/env bash
sed -i "/id$1/s/state0/state1/" $2

এটির মত এটি উদ্ঘাটন করে:

./sed.sh 312 file

বিঃদ্রঃ: সবসময় সঙ্গে সতর্কতা অবলম্বন করা -i সুইচ: এটি ছাড়া প্রথম পরীক্ষা।


ধন্যবাদ। কিন্তু আমি একটি স্ক্রিপ্ট সঙ্গে পরামিতি ব্যবহার করতে পারবেন না। আমার প্ল্যাটফর্মের উপর একটি বাগ আছে যা আমি মনে করি। কিন্তু যাইহোক আপনার সমাধান সত্য। আবার ধন্যবাদ.
Gefolge

আমি আইডি ব্যবহার করে এখন "cat-n" দিয়ে লাইন নম্বরটি পেতে পারি।
Gefolge

@ এজিভেন আপনি লাইন নম্বর সম্পর্কে মধ্যবর্তী উত্তরণটি এড়িয়ে যেতে পারেন এবং প্রথম উদাহরণ হিসাবে আইডি ব্যবহার করতে পারেন।
simlev

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