উত্তর:
sed -i 's/original/new/g' file.txt
ব্যাখ্যা:
sed
= স্ট্রিম ইডিটর-i
= ইন-প্লেস (অর্থাত্ মূল ফাইলটিতে আবার সংরক্ষণ করুন)কমান্ড স্ট্রিং:
s
= বিকল্প কমান্ডoriginal
= প্রতিস্থাপনের জন্য শব্দটি বর্ণনা করার একটি নিয়মিত প্রকাশ (বা কেবলমাত্র শব্দটি নিজেই)new
= এটির সাথে প্রতিস্থাপন করার পাঠ্যg
= গ্লোবাল (অর্থাত্ প্রথম স্থানটি নয়, সমস্ত প্রতিস্থাপন করুন)file.txt
ফাইলের নাম
sed
তাদের সাথে মেলে। -r
পরিবর্তে বর্ধিত আরই ব্যবহার করতে চাইলে একটি পতাকা যুক্ত করুন ।
/
চরিত্রের সাথে মেলে যা আপনি প্রয়োজন হয় তবে আপনি অন্য কিছু চরিত্রকে পৃথককারী (উদাহরণস্বরূপ 's_old/text_new/text_g'
) হিসাবে ব্যবহার করতে পারেন । অন্যথায়, আপনি আক্ষরিক চরিত্রটি পেতে যেকোনটির \
আগে একটি $ * . [ \ ^
রাখতে পারেন।
sed -i '.bak' 's/original/new/g' file.txt
শূন্য দৈর্ঘ্যের এক্সটেনশান দিয়ে চালানো যেতে পারে sed -i '' 's/original/new/g' file.txt
যা কোনও ব্যাকআপ তৈরি করে না।
এটি করার বিভিন্ন উপায় রয়েছে। একটি ব্যবহার করছে sed
এবং রেইগেক্স। এসইডি হ'ল পাঠ্য পরিশোধক ও রূপান্তরকরণের জন্য একটি স্ট্রিম সম্পাদক। একটি উদাহরণ নিম্নরূপ:
marco@imacs-suck: ~$ echo "The slow brown unicorn jumped over the hyper sleeping dog" > orly
marco@imacs-suck: ~$ sed s/slow/quick/ < orly > yarly
marco@imacs-suck: ~$ cat yarly
The quick brown unicorn jumped over the hyper sleeping dog
পাইপগুলির চেয়ে আরও বোধগম্য < strin
এবং এটির অন্য উপায় > strout
!
marco@imacs-suck: ~$ cat yarly | sed s/unicorn/fox/ | sed s/hyper/lazy/ > nowai
marco@imacs-suck: ~$ cat nowai
The quick brown fox jumped over the lazy sleeping dog
cat
ইন cat file | sed '...'
অপ্রয়োজনীয়। আপনি সরাসরি বলতে পারেন sed '...' file
।
sed -i'.bak' -e 's/unicorn/fox/g;s/hyper/brown/g' yarly
ফাইলটি ইয়ারলি গ্রহণ করবে এবং ব্যাকআপ তৈরির সময় স্থানটিতে দুটি পরিবর্তন করবে। ব্যবহার time bash -c "$COMMAND"
এটা প্রস্তাব দেওয়া এই সংস্করণে একটি ~ 5 বার দ্রুততর সেই সময় হতে।
এটি অর্জনের বিভিন্ন উপায় রয়েছে। স্ট্রিং প্রতিস্থাপনের মাধ্যমে কেউ কী অর্জন করার চেষ্টা করে তার জটিলতার উপর নির্ভর করে এবং ব্যবহারকারী যে সরঞ্জামের সাথে পরিচিত তার উপর নির্ভর করে কিছু পদ্ধতি অন্যদের চেয়ে বেশি পছন্দ করা যেতে পারে।
এই উত্তরে আমি সাধারণ input.txt
ফাইলটি ব্যবহার করছি , যা আপনি এখানে সরবরাহিত সমস্ত উদাহরণ পরীক্ষা করতে ব্যবহার করতে পারেন। ফাইল সামগ্রী:
roses are red , violets are blue
This is an input.txt and this doesn't rhyme
বাশটি আসলে পাঠ্য প্রক্রিয়াজাতকরণের জন্য নয়, তবে পরামিতি প্রসারণের মাধ্যমে সহজ প্রতিস্থাপনগুলি করা যেতে পারে , বিশেষত এখানে আমরা সাধারণ কাঠামো ব্যবহার করতে পারি ${parameter/old_string/new_string}
।
#!/bin/bash
while IFS= read -r line
do
case "$line" in
*blue*) printf "%s\n" "${line/blue/azure}" ;;
*) printf "%s\n" "$line" ;;
esac
done < input.txt
এই ছোট স্ক্রিপ্টটি স্থান প্রতিস্থাপন করে না, এর অর্থ আপনাকে নতুন পাঠ্যে নতুন ফাইলে সংরক্ষণ করতে হবে এবং পুরানো ফাইল থেকে মুক্তি দিতে হবে, বা mv new.txt old.txt
পার্শ্ব দ্রষ্টব্য: আপনি কেন আগ্রহী তা কেন while IFS= read -r ; do ... done < input.txt
ব্যবহার করা হয় তা মূলত শেল এর মাধ্যমে ফাইল লাইন এক এক করে পড়ার উপায়। দেখুন এই রেফারেন্সের জন্য।
এডাব্লুকে, একটি পাঠ্য প্রক্রিয়াজাতকরণ ইউটিলিটি হওয়ায় এ জাতীয় কাজের জন্য উপযুক্ত। এটা সহজ প্রতিস্থাপন এবং আরো অনেক কিছু উন্নত উপর ভিত্তি করে বেশী কি করতে পারেন রেগুলার এক্সপ্রেশনের । এটি দুটি ফাংশন সরবরাহ করে: sub()
এবং gsub()
। প্রথমটি কেবলমাত্র প্রথম ঘটনাকেই প্রতিস্থাপন করে, যখন দ্বিতীয়টি - পুরো স্ট্রিংয়ের উপস্থিতিগুলিকে প্রতিস্থাপন করে। উদাহরণস্বরূপ, যদি আমাদের স্ট্রিং থাকে one potato two potato
তবে এটি ফলাফল হতে পারে:
$ echo "one potato two potato" | awk '{gsub(/potato/,"banana")}1'
one banana two banana
$ echo "one potato two potato" | awk '{sub(/potato/,"banana")}1'
one banana two potato
এডাব্লুকে আর্গুমেন্ট হিসাবে একটি ইনপুট ফাইল নিতে পারে, তাই একই জিনিসগুলির সাথে input.txt
করা সহজ হবে:
awk '{sub(/blue/,"azure")}1' input.txt
আপনার কাছে থাকা এডাব্লু কে এর সংস্করণ অনুসারে, এটি স্থানস্থ সম্পাদনা থাকতে পারে বা নাও থাকতে পারে, তাই স্বাভাবিক অনুশীলনটি নতুন পাঠ্য সংরক্ষণ এবং প্রতিস্থাপন করে। উদাহরণস্বরূপ এই জাতীয় কিছু:
awk '{sub(/blue/,"azure")}1' input.txt > temp.txt && mv temp.txt input.txt
সেড একটি লাইন সম্পাদক। এটি নিয়মিত প্রকাশও ব্যবহার করে তবে সাধারণ বিকল্পগুলির জন্য এটি করা যথেষ্ট:
sed 's/blue/azure/' input.txt
এই সরঞ্জামটি সম্পর্কে যা ভাল তা হ'ল এটিতে স্থানের সম্পাদনা রয়েছে যা আপনি -i
পতাকা দিয়ে সক্ষম করতে পারেন ।
পার্ল হ'ল আরেকটি সরঞ্জাম যা প্রায়শই পাঠ্য প্রক্রিয়াজাতকরণের জন্য ব্যবহৃত হয় তবে এটি সাধারণ উদ্দেশ্য ভাষা and এটি অন্যান্য ভাষা যেমন সি, সেড, অ্যাজক এবং অন্যান্য থেকে প্রচুর ধারণা / বৈশিষ্ট্য ধার করেছে orrow সাধারণ প্রতিস্থাপনটি তাই করা যেতে পারে:
perl -pe 's/blue/azure/' input.txt
সেডের মতো পার্লেরও -i পতাকা রয়েছে।
এই ভাষাটি অত্যন্ত বহুমুখী এবং এটি বিভিন্ন ধরণের অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়। স্ট্রিংগুলির সাথে কাজ করার জন্য এটির অনেকগুলি ফাংশন রয়েছে, যার মধ্যে রয়েছে replace()
, তাই আপনার মতো চলক থাকলে আপনি var="Hello World"
করতে পারতেনvar.replace("Hello","Good Morning")
ফাইল পড়ার সহজ স্ট্রিং এবং স্ট্রিং এর প্রতিস্থাপন যেমন হবে:
python -c "import sys;lines=sys.stdin.read();print lines.replace('blue','azure')" < input.txt
পাইথনের সাথে আপনাকে নতুন ফাইলও আউটপুট করতে হবে যা আপনি স্ক্রিপ্টের মধ্যে থেকেও করতে পারেন। উদাহরণস্বরূপ, এখানে একটি সহজ:
#!/usr/bin/env python
import sys
import os
import tempfile
tmp=tempfile.mkstemp()
with open(sys.argv[1]) as fd1, open(tmp[1],'w') as fd2:
for line in fd1:
line = line.replace('blue','azure')
fd2.write(line)
os.rename(tmp[1],sys.argv[1])
এই স্ক্রিপ্টটি input.txt
কমান্ড-লাইন আর্গুমেন্ট হিসাবে কল করা উচিত। কমান্ড-লাইন আর্গুমেন্টের সাথে পাইথন স্ক্রিপ্টটি চালানোর জন্য সঠিক আদেশ command
$ ./myscript.py input.txt
অথবা
$ python ./myscript.py input.txt
অবশ্যই, ./myscript.py
এটি আপনার বর্তমান কার্যনির্বাহী ডিরেক্টরিতে রয়েছে এবং প্রথম উপায়ে নিশ্চিত করুন যে এটি নির্বাহযোগ্য সেট রয়েছে ensurechmod +x ./myscript.py
পাইথনের নিয়মিত এক্সপ্রেশনও থাকতে পারে, বিশেষত, re
মডিউল রয়েছে, যার re.sub()
ফাংশন রয়েছে, যা আরও উন্নত প্রতিস্থাপনের জন্য ব্যবহার করা যেতে পারে।
tr
ইউনিক্স- এ কমান্ডটি ব্যবহার করা হচ্ছে
tr
এটি একটি দুর্দান্ত সরঞ্জাম, তবে মনে রাখবেন যে এটি অক্ষরের সেটগুলি প্রতিস্থাপনের জন্য (উদাহরণস্বরূপ , tr abc cde
অনুবাদ a
করতে হবে । এটি পুরো শব্দের প্রতিস্থাপনের সাথে বাc
b
d
sed
python
আপনি এক্স মোডে ভিম ব্যবহার করতে পারেন:
ex -s -c '%s/OLD/NEW/g|x' file
%
সমস্ত লাইন নির্বাচন করুন
s
বিকল্প
g
প্রতিটি লাইনে সমস্ত দৃষ্টান্ত প্রতিস্থাপন করুন
x
পরিবর্তনগুলি করা হয়েছে (তাদের আছে) লিখে প্রস্থান করুন
অ্যাডকের জিএসব কমান্ডের মাধ্যমে,
awk '{gsub(/pattern/,"replacement")}' file
উদাহরণ:
awk '{gsub(/1/,"0");}' file
উপরের উদাহরণে, সমস্ত 1 এর কলাম যেখানেই থাকুক না কেন 0 এর দ্বারা প্রতিস্থাপিত হবে।
আপনি যদি কোনও নির্দিষ্ট কলামে প্রতিস্থাপন করতে চান, তবে এটির মতো করুন,
awk '{gsub(/pattern/,"replacement",column_number)}' file
উদাহরণ:
awk '{gsub(/1/,"0",$1);}' file
এটি প্রথম কলামে 0 দিয়ে 1 প্রতিস্থাপন করে।
পার্লের মাধ্যমে,
$ echo 'foo' | perl -pe 's/foo/bar/g'
bar
inotifywait
অধীনে ফাইলটি দেখছি sh
, এবং সিএসভি ফর্ম্যাটে ডেটা প্রতিবেদন করছি (কারণ কাস্টম বিন্যাসটি বগি। আমি তখন বুঝতে পেরেছিলাম যে শেল স্ক্রিপ্টগুলিতে সিএসভি ডকুমেন্ট হ্যান্ডেল করার কোনও সহজ উপায় নেই ... এবং আমি এটি খুব হালকা চাই। সুতরাং আমি CSV পার্স এবং প্রতিবেদন করার জন্য একটি বেশ সহজ স্ক্রিপ্ট শুরু করেছি। আমি সিএসভি স্পেক পড়েছি এবং লক্ষ্য করেছি এটি আমার প্রত্যাশার চেয়ে আরও বিস্তৃত এবং ডাবল কোটে মোড়ানো মাল্টলাইন মানকে সমর্থন করে। আমি sed
টোকেনাইজেশনের উপর নির্ভর করছিলাম তবে শীঘ্রই বুঝতে পারলাম যে sed
কলটি মাল্টিলাইনগুলি দুটি লাইন পর্যন্ত রয়েছে। তাহলে আমার সিএসভি মানগুলির মধ্যে একটি যদি দুটির বেশি লাইনে ছড়িয়ে যায়?
sed
হয় গুলি tream ইডি itor , যে আপনি ব্যবহার করতে পারেন |
পাঠাতে (নল) মান স্ট্রিম মাধ্যমে (stdin এবং stdout- এ বিশেষভাবে) sed
এবং তাদের ফ্লাইটে প্রোগ্রামেটিক্যালি পরিবর্তন, এটা ইউনিক্স দর্শন ঐতিহ্য একটি কুশলী হাতিয়ার তৈরির; তবে -i
নীচে উল্লিখিত প্যারামিটারটি ব্যবহার করে সরাসরি ফাইলগুলি সম্পাদনা করতে পারে ।
নিম্নলিখিত বিবেচনা করুন :
sed -i -e 's/few/asd/g' hello.txt
s/
এরfew
সাথে প্রাপ্ত অভিব্যক্তিটি প্রতিস্থাপন করতে ব্যবহৃত হয় asd
:
কয়েক, সাহসী।
আসাদ, সাহসী।
/g
"গ্লোবাল" এর অর্থ দাঁড়ায়, পুরো লাইনের জন্য এটি করা। আপনি যদি /g
( ছেড়ে দিয়ে থাকেন s/few/asd/
তবে সর্বদা তিনটি স্ল্যাশ হওয়া দরকার না কেন) এবং few
একই লাইনে দু'বার উপস্থিত হলে কেবল প্রথমটিতে few
পরিবর্তিত হবে asd
:
কয়েক জন পুরুষ, কয়েকজন মহিলা, সাহসী।
আসাদ পুরুষ, কয়েকজন মহিলা, সাহসী।
এটি কিছু পরিস্থিতিতে কার্যকর যেমন লাইনগুলির শুরুতে বিশেষ অক্ষরগুলি পরিবর্তনের জন্য (উদাহরণস্বরূপ, কিছু লোক ইমেল থ্রেডগুলিতে পূর্বের উপাদানগুলিকে একটি অনুভূমিক ট্যাব দিয়ে উদ্ধৃত করার সময় লাইনের পরে উদ্ধৃত বীজগণিত বৈষম্যকে রেখে দেয় অচ্ছুত), তবে আপনার উদাহরণে যেখানে আপনি নির্দিষ্ট করেছেন যে কোথাও few
এটি ঘটবে প্রতিস্থাপন করা উচিত, নিশ্চিত হয়ে নিন যে এটি আপনার রয়েছে /g
।
নিম্নলিখিত দুটি বিকল্প (পতাকা) এক সাথে সংযুক্ত করা হয়েছে -ie
:
-i
বিকল্পটি ফাইলটিতে আই এন এডিট করতে ব্যবহৃত হয় hello.txt
।
-e
এই ক্ষেত্রে ই- এক্সপ্রেশন / কমান্ডটি ইঙ্গিত করে s/
।
দ্রষ্টব্য: -i -e
আপনি অনুসন্ধান / প্রতিস্থাপন করতে এটি ব্যবহার করা গুরুত্বপূর্ণ । যদি আপনি এটি করেন তবে আপনি -ie
'ই' অক্ষর যুক্ত প্রতিটি ফাইলের একটি ব্যাকআপ তৈরি করবেন।
আপনি এটির মতো করতে পারেন:
locate <part of filaname to locate> | xargs sed -i -e "s/<Old text>/<new text>/g"
উদাহরণস্বরূপ: সনাক্তকরণ কমান্ডের ফলে প্রাপ্ত সমস্ত ফাইলগুলিতে [লগডির ',' '] ([[]) ছাড়া [লগডির', os.getcwd ()] সহ সমস্ত উপস্থিতি প্রতিস্থাপন করুন:
ex1:
locate tensorboard/program.py | xargs sed -i -e "s/old_text/NewText/g"
ex2:
locate tensorboard/program.py | xargs sed -i -e "s/logdir', ''/logdir', os.getcwd()/g"
যেখানে [টেনসরবোর্ড / প্রোগ্রাম.পি] অনুসন্ধান করার জন্য ফাইল
logdir', ''
-> /logdir', os.getcwd()
) এই উত্তরটিকে পার্স করা শক্ত করে তোলে। এছাড়াও, এটি উল্লেখ করা দরকার যে আপনার উত্তর প্রথমে সেড ব্যবহার করতে ফাইলগুলি সনাক্ত করে, কারণ এটি প্রশ্নের অংশ নয়।