উত্তর:
cd /path/to/your/folder
sed -i 's/foo/bar/g' *
"ফু" এর ঘটনাগুলি "বার" দিয়ে প্রতিস্থাপন করা হবে।
ম্যাকোসের মতো বিএসডি সিস্টেমে আপনাকে ম্যানপেজ অনুযায়ী ব্যাকআপ এক্সটেনশন সরবরাহ করতে হবে -i '.bak'
অথবা অন্যথায় "ঝুঁকিপূর্ণ দুর্নীতি বা আংশিক সামগ্রী" সরবরাহ করতে হবে।
cd /path/to/your/folder
sed -i '.bak' 's/foo/bar/g' *
sed
, -i
পরে একটি স্ট্রিং, যা পুরাতন ফাইলের নাম সংযোজন করা হয় প্রয়োজন। সুতরাং sed -i .bak 's/foo/bar/g' *.xx
সমস্ত .xx
ফাইলকে সমমানের .xx.bak
নামে সরিয়ে নিয়ে যায় এবং তারপরে .xx
foo → বার বিকল্পের সাথে ফাইলগুলি উত্পন্ন করে ।
sed -i 's/foo\ with\ spaces/bar/g' *
। আমি মনে করি আপনি এত দিন পরে খুঁজে পেয়েছেন ... তবে এইভাবে অন্যদের একই সমস্যাটি খুঁজে পাওয়া যায়।
sed -i -e 's/foo/bar/g' $(find /home/user/base/dir)
কাস্পারের উত্তরের মতো তবে একটি লাইনে সমস্ত উপস্থিতি প্রতিস্থাপনের জন্য জি পতাকা সহ
find ./ -type f -exec sed -i 's/string1/string2/g' {} \;
সংবেদনশীল বৈশ্বিক ক্ষেত্রে:
find ./ -type f -exec sed -i 's/string1/string2/gI' {} \;
LC_ALL=C find ./ -type f -exec sed -i '' -e 's/proc.priv/priv/g' {} \;
( এই পোস্টটি এবং এটি দেখুন )
--include=*.whatever
-r দিয়ে যুক্ত করতে হবে
.git/
। cd
নিচের স্তরে নেমে যেতে ভুলবেন না ।
git status
ফেরৎ: error: bad index file sha1 signature.... fatal: index file corrupt
। কি দেয়?
@ কেভের উত্তরটি ভাল, তবে কেবল তাত্ক্ষণিক ডিরেক্টরিতে থাকা ফাইলগুলিকেই প্রভাবিত করে below নীচের উদাহরণটি পুনরাবৃত্তভাবে ফাইলগুলি খুঁজে পেতে গ্রেপ ব্যবহার করে। এটি আমার জন্য প্রতিটি সময় কাজ করে।
grep -rli 'old-word' * | xargs -i@ sed -i 's/old-word/new-word/g' @
কমান্ড ভাঙ্গা
grep -r : --recursive , প্রতিটি ডিরেক্টরিতে পুনরাবৃত্তভাবে সমস্ত ফাইল পড়ুন। গ্রেপ-
এল : -প্রিন্ট-উইথ ম্যাচগুলি , প্রতিটি ফাইলের মিল মেলে এমন লাইনগুলি মুদ্রণের পরিবর্তে একটি ম্যাচ রয়েছে তার নাম মুদ্রণ করে।
, grep -i : --ignore-কেস ।
xargs : STDIN কে আর্গুমেন্টে রূপান্তর করুন, এই উত্তরটি অনুসরণ করুন ।
xargs -i @ ~ কমান্ড ধারণ করে @ ~ : যুক্তি জন্য একটি স্থানধারক একটি নির্দিষ্ট অবস্থানে ব্যবহার করা ~ কমান্ড ~ , @ চিহ্ন একটি স্থানধারক যা কোন স্ট্রিং দ্বারা প্রতিস্থাপিত পারে।
সেড- i : ব্যাকআপ ব্যতীত , জায়গায় ফাইল সম্পাদনা করুন।
সেড এস / রেজিএক্সপ্স / রিপ্লেসমেন্ট / : রিপ্লেসমেন্টের সাথে স্ট্রিং ম্যাচিং রেজিএক্সপেক্ট ।
সেড এস / রেজিএক্সপ্স / রিপ্লেসমেন্ট / জি : গ্লোবাল , কেবলমাত্র প্রথম ম্যাচের পরিবর্তে প্রতিটি ম্যাচের জন্য বিকল্প তৈরি করুন।
grep --include={*.php,*.html,*.js} -rnl './' -e "old-word" | xargs -i@ sed -i 's/old-word/new-word/g' @
|
, কেন -i
, xargs কমান্ডে? আমি ম্যানুয়ালটিতে পড়েছি এটি অবহিত এবং -I
পরিবর্তে ব্যবহার করা উচিত । এবং @
প্যাটার্নের জন্য শুরু এবং শেষের জন্য একটি সীমানা হিসাবে ব্যবহৃত হয়?
grep -rli 'old-word' * | xargs -I@ sed -i '' 's/2.0.0/latest/g' @
rli
) এবং @
চিহ্নটি ভেঙে দেন তবে এটি দুর্দান্ত হবে
এটি আমার পক্ষে কাজ করেছে:
find ./ -type f -exec sed -i 's/string1/string2/' {} \;
Howerver, এই নি: sed -i 's/string1/string2/g' *
। সম্ভবত "foo" স্ট্রিং 1 এবং "বার" স্ট্রিং 2 নয় to
find ./ -type f -exec sed -i '' -e 's/string1/string2/' {} \;
ইতিমধ্যে তালিকাবদ্ধ এটির জন্য কয়েকটি মানক উত্তর রয়েছে। সাধারণত, আপনি ব্যবহার করতে পারেন খোঁজ ফাইল যাও recursively লিস্টে এবং তারপর সঙ্গে অপারেশন না sed বা Perl ।
বেশিরভাগ দ্রুত ব্যবহারের জন্য, আপনি rpl কমান্ডটি মনে রাখার চেয়ে অনেক সহজ মনে করতে পারেন। এখানে প্রতিস্থাপন (foo -> বার) সমস্ত ফাইলের পুনরাবৃত্তভাবে দেওয়া হচ্ছে:
rpl -R foo bar .
আপনার সম্ভবত এটি ইনস্টল করতে হবে ( apt-get install rpl
বা অনুরূপ)।
যাইহোক, নিয়মিত অভিব্যক্তি এবং পিছনের বিকল্পের সাথে যুক্ত ফাইলগুলির নাম, বা ফাইলের নাম এবং সেইসাথে অনুসন্ধান-এবং-প্রতিস্থাপন জড়িত এমন কঠোর কাজের জন্য, আমি যে সাধারণ এবং শক্তিশালী সরঞ্জাম সম্পর্কে অবগত রয়েছি তা হ'ল পুনর্নবীকরণ , একটি ছোট পাইথন স্ক্রিপ্ট আমি কিছুক্ষণ আগে লিখেছিলাম নাম পরিবর্তন এবং রিফ্যাক্টরিং কাজগুলি thornier। যে কারণে আপনি এটি পছন্দ করতে পারেন তা হ'ল:
এটি ব্যবহার করতে pip install repren
,। উদাহরণগুলির জন্য README পরীক্ষা করুন ।
ফাইলগুলির মধ্যে কোনও পাথ প্রতিস্থাপন করতে (পালানোর অক্ষরগুলি এড়ানো) আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:
sed -i 's@old_path@new_path@g'
@ সাইন এর মানে হল যে নিম্নলিখিত অক্ষরে সমস্ত বিশেষ অক্ষরকে উপেক্ষা করা উচিত।
যদি আপনার স্ট্রিংটিতে ফরোয়ার্ড স্ল্যাশ থাকে (/), আপনি ডিলিমেটারটি '+' এ পরিবর্তন করতে পারেন।
find . -type f -exec sed -i 's+http://example.com+https://example.com+g' {} +
এই কমান্ডটি বর্তমান ডিরেক্টরিতে পুনরাবৃত্তভাবে চলবে।
../domain.com
করতে সহায়তা করেছেdomain.com
"ফু" এর প্রথম লাইনের উপস্থিতিগুলিকে "বার" দিয়ে প্রতিস্থাপন করা হবে। এবং আপনি দ্বিতীয় লাইনটি পরীক্ষা করে দেখতে পারেন।
grep -rl 'foo' . | xargs sed -i 's/foo/bar/g'
grep 'foo' -r * | awk -F: {'print $1'} | sort -n | uniq -c
grep -rl 'foo' . | xargs sed -i 's/foo/bar/g'
আপনার যদি ফাইলগুলির তালিকা থাকে তবে আপনি ব্যবহার করতে পারেন
replace "old_string" "new_string" -- file_name1 file_name2 file_name3
আপনার কাছে সমস্ত ফাইল থাকলে আপনি ব্যবহার করতে পারেন
replace "old_string" "new_string" -- *
এক্সটেনশন সহ আপনার ফাইলগুলির তালিকা থাকলে আপনি ব্যবহার করতে পারেন
replace "old_string" "new_string" -- *.extension
replace "old_string" "new_string" -- *.txt
replace
ইউটিলিটিটি কোথা থেকে পাবেন তা যুক্ত করা ভাল । এই তথ্য ব্যতীত, এই উত্তরটি অসম্পূর্ণ।
"আপনি সন্ধান এবং সেড ব্যবহার করতে পারেন তবে আমি দেখতে পেয়েছি যে পার্লের এই ছোট্ট রেখাটি দুর্দান্তভাবে কাজ করে।
perl -pi -w -e 's/search/replace/g;' *.php
"( Http://www.liamdelahunty.com/tips/linux_search_and_replace_m Multipleple_files.php থেকে নেওয়া )
আমার সেরা ফলাফলগুলি পার্ল এবং গ্রেপ ব্যবহার করে আসে (সেই ফাইলটির সন্ধানের এক্সপ্রেশন রয়েছে তা নিশ্চিত করতে)
perl -pi -w -e 's/search/replace/g;' $( grep -rl 'search' )
আপনি স্ট্রিংটি অনুসন্ধান করতে চান search
এবং replace
একাধিক ফাইল জুড়ে এটি প্রতিস্থাপন করতে চান , এটি আমার যুদ্ধ-পরীক্ষিত, এক-লাইন সূত্র :
grep -RiIl 'search' | xargs sed -i 's/search/replace/g'
দ্রুত গ্রেপ ব্যাখ্যা:
-R
- পুনরাবৃত্ত অনুসন্ধান-i
- কেস-সংবেদনশীল-I
- বাইনারি ফাইলগুলি এড়িয়ে যান (আপনি কি টেক্সট চান, তাই না?)-l
- আউটপুট হিসাবে একটি সহজ তালিকা মুদ্রণ করুন। অন্যান্য কমান্ডের প্রয়োজনতারপরে গ্রেপ আউটপুটটি সেডে পাইপ করা হয় (xargs এর মাধ্যমে) যা আসলে পাঠ্য প্রতিস্থাপনের জন্য ব্যবহৃত হয়। -i
পতাকা সরাসরি ফাইল পরিবর্তিত হবে। এক ধরণের "ড্রাই ড্রাই" মোডের জন্য এটি সরান।
এই প্রশ্নটি (এবং উত্তর) খুঁজে পাওয়ার আগে আমি আমার নিজের সমাধানটি একত্রিত করেছি। আমি "প্রতিস্থাপন" "বেশ কয়েকটি" এবং "এক্সএমএল" এর বিভিন্ন সংমিশ্রণের জন্য অনুসন্ধান করেছি কারণ এটি আমার অ্যাপ্লিকেশন, তবে এই নির্দিষ্টটিটি খুঁজে পেল না।
আমার সমস্যা: আমার কাছে জটিল বিষয়বস্তুযুক্ত পরীক্ষার ক্ষেত্রে ডেটা সহ বসন্তের এক্সএমএল ফাইল ছিল। জাভা উত্স কোডের একটি রিফ্যাক্টর প্রচুর ক্লাস পরিবর্তন করে এবং এক্সএমএল ডেটা ফাইলগুলিতে প্রয়োগ করে না। পরীক্ষার কেসগুলির ডেটা সংরক্ষণ করার জন্য, আমাকে বেশ কয়েকটি ডিরেক্টরিতে বিতরণ করা সমস্ত এক্সএমএল ফাইলগুলিতে সমস্ত শ্রেণীর নাম পরিবর্তন করতে হবে। মূল এক্সএমএল ফাইলগুলির ব্যাকআপ কপিগুলি সংরক্ষণ করার সময় (যদিও এটি আবশ্যক ছিল না, কারণ সংস্করণ নিয়ন্ত্রণ আমাকে এখানে সংরক্ষণ করবে)।
আমি find
+ এর কিছু সংমিশ্রণের সন্ধান করছিলাম sed
, কারণ এটি অন্যান্য পরিস্থিতিতে আমার জন্য কাজ করেছিল, তবে একসাথে বেশ কয়েকটি প্রতিস্থাপনের সাথে নয়।
তারপরে আমি উবুন্টুকে প্রতিক্রিয়া জিজ্ঞাসা করেছিলাম এবং এটি আমার কমান্ড লাইনটি তৈরি করতে সহায়তা করেছে:
find -name "*.xml" -exec sed -s --in-place=.bak -e 's/firstWord/newFirstWord/g;s/secondWord/newSecondWord/g;s/thirdWord/newThirdWord/g' {} \;
এবং এটি পুরোপুরি কাজ করেছে (ভাল, আমার ক্ষেত্রে ছয়টি আলাদা প্রতিস্থাপন ছিল)। তবে দয়া করে মনে রাখবেন এটি বর্তমান ডিরেক্টরি অনুসারে সমস্ত * .xML ফাইলগুলিকে স্পর্শ করবে। সে কারণে এবং আপনি যদি কোনও সংস্করণ নিয়ন্ত্রণ সিস্টেমে দায়বদ্ধ হন তবে আপনি প্রথমে ফিল্টার করতে পারেন এবং কেবল sed
আপনার পছন্দসই স্ট্রিংগুলি রেখে যেতে চান; মত:
find -name "*.xml" -exec grep -e "firstWord" -e "secondWord" -e "thirdWord" {} \; -exec sed -s --in-place=.bak -e 's/firstWord/newFirstWord/g;s/secondWord/newSecondWord/g;s/thirdWord/newThirdWord/g' {} \;
findstr /spin /c:"quéquieresbuscar" *.xml
এটি কার্যকর হবে।
সত্যিই খোঁড়া, তবে ওএসএক্সে ডান কাজ করার জন্য আমি কোনও সিড কমান্ড পাইনি, সুতরাং আমি পরিবর্তে এই বোবা জিনিসটি করেছি:
:%s/foo/bar/g
:wn
^ - এই তিনটি লাইনটি আমার ক্লিপবোর্ডে অনুলিপি করুন (হ্যাঁ, শেষের লাইনটি অন্তর্ভুক্ত করুন), তারপরে:
vi *
এবং কমান্ড-ভি চেপে ধরে রাখুন যতক্ষণ না এটি বলে যে কোনও ফাইল নেই।
বোবা ... হল hacky ... কার্যকর ...
একটি ম্যাকবুক প্রোতে আমি নিম্নলিখিতটি ব্যবহার করেছি ( https://stackoverflow.com/a/19457213/6169225 দ্বারা অনুপ্রাণিত ):
sed -i '' -e 's/<STR_TO_REPLACE>/<REPLACEMENT_STR>/g' *
-i ''
আপনি কোনও ব্যাকআপ নিচ্ছেন না তা নিশ্চিত করবে।
-e
আধুনিক রেজেক্সের জন্য।
-e
শুধু সেডকে বলে যে পরের টোকেনটি একটি কমান্ড। বর্ধিত নিয়মিত এক্সপ্রেশনগুলির জন্য, -E
পরিবর্তে ব্যবহার করুন।
স্ট্রিম এডিটরটি একাধিক ফাইলগুলিকে "অন্তর্নিহিত" পরিবর্তন করে যখন -i
স্যুইচটি সঞ্চারিত হয় , যা একটি ব্যাকআপ ফাইল আর্গুমেন্ট হিসাবে শেষ হয়। সুতরাং
sed -i.bak 's/foo/bar/g' *
এই ফোল্ডারে সমস্ত ফাইলের foo
সাথে প্রতিস্থাপন bar
করে তবে সাবফোল্ডারে নেমে আসে না। এটি .bak
আপনার ডিরেক্টরিতে প্রতিটি ফাইলের জন্য একটি নতুন ফাইল তৈরি করবে । এই ডিরেক্টরিতে এবং এর সমস্ত উপ-ডিরেক্টরিগুলির সমস্ত ফাইলের জন্য এটি পুনরাবৃত্তভাবে find
করতে, ডিরেক্টরি ট্রিটিকে অতিক্রম করার জন্য আপনার একটি সহায়ক প্রয়োজন ।
find ./ -print0 | xargs -0 sed -i.bak 's/foo/bar/g' *
find
find ./ -name '*.php' -or -name '*.html' -print0
প্রয়োজনে আরও যুক্তি যুক্ত করে নির্দিষ্ট ফাইলগুলি পরিবর্তন করে কী ফাইলগুলিতে আপনাকে আরও বিধিনিষেধ দেয় ।
দ্রষ্টব্য: জিএনইউতে sed
কোনও ফাইল সমাপ্তির প্রয়োজন হয় না sed -i 's/foo/bar/g' *
, পাশাপাশি কাজ করবে; ফ্রিবিএসডি sed
একটি বর্ধনের দাবি জানায়, তবে এর মধ্যে একটি স্থানের অনুমতি দেয়, তাই sed -i .bak s/foo/bar/g *
কাজ করে।
মাল্টিডিট কমান্ডের জন্য স্ক্রিপ্ট
multiedit [-n PATTERN] OLDSTRING NEWSTRING
কাস্পারের উত্তর থেকে আমি কমান্ড লাইন আর্গুমেন্টগুলি গ্রহণ করতে এবং বিকল্পভাবে একটি প্যাটার্নের সাথে মেলে ফাইলের নামগুলি সীমাবদ্ধ করতে বাশ স্ক্রিপ্ট তৈরি করেছি। আপনার AT PATH এ সংরক্ষণ করুন এবং সম্পাদনযোগ্য করুন, তারপরে কেবল উপরের কমান্ডটি ব্যবহার করুন।
লিপিটি এখানে:
#!/bin/bash
_help="\n
Replace OLDSTRING with NEWSTRING recursively starting from current directory\n
multiedit [-n PATTERN] OLDSTRING NEWSTRING\n
[-n PATTERN] option limits to filenames matching PATTERN\n
Note: backslash escape special characters\n
Note: enclose STRINGS with spaces in double quotes\n
Example to limit the edit to python files:\n
multiedit -n \*.py \"OLD STRING\" NEWSTRING\n"
# ensure correct number of arguments, otherwise display help...
if [ $# -lt 2 ] || [ $# -gt 4 ]; then echo -e $_help ; exit ; fi
if [ $1 == "-n" ]; then # if -n option is given:
# replace OLDSTRING with NEWSTRING recursively in files matching PATTERN
find ./ -type f -name "$2" -exec sed -i "s/$3/$4/g" {} \;
else
# replace OLDSTRING with NEWSTRING recursively in all files
find ./ -type f -exec sed -i "s/$1/$2/" {} \;
fi
যদি ফাইলটিতে ব্যাকস্ল্যাশ থাকে (সাধারণত পাথ থাকে) আপনি এই জাতীয় কিছু চেষ্টা করতে পারেন:
sed -i -- 's,<path1>,<path2>,g' *
উদা:
sed -i -- 's,/foo/bar,/new/foo/bar,g' *.sh (in all shell scripts available)
আমার ব্যক্তিগত ইংলিশ নোড বজায় রাখতে, আমি একটি ইউটিলিটি স্ক্রিপ্ট লিখেছিলাম যা ডিরেক্টরিতে পুনরাবৃত্তির সাথে সমস্ত ফাইলের জন্য একাধিক জোড়া পুরানো / নতুন স্ট্রিং প্রতিস্থাপন করতে সহায়তা করে।
পুরানো / নতুন স্ট্রিংয়ের একাধিক জুড়ি একটি হ্যাশ মানচিত্রে পরিচালিত হয়।
দিরটি কমান্ড লাইন বা এনভায়রনমেন্ট ভেরিয়েবলের মাধ্যমে সেট করা যেতে পারে, মানচিত্রটি স্ক্রিপ্টে হার্ড কোডড, তবে প্রয়োজনে কোনও ফাইল থেকে লোড করার জন্য কোডটি পরিবর্তন করতে পারেন।
কিছু নতুন বৈশিষ্ট্যের কারণে এটিতে 4.2 বাশ দরকার।
en_standardize.sh:
#! /bin/bash
# (need bash 4.2+,)
#
# Standardize phonetic symbol of English.
#
# format:
# en_standardize.sh [<dir>]
#
# params:
# * dir
# target dir, optional,
# if not specified then use environment variable "$node_dir_en",
# if both not provided, then will not execute,
# *
#
paramCount=$#
# figure target dir,
if [ $paramCount -ge 1 ]; then # dir specified
echo -e "dir specified (in command):\n\t$1\n"
targetDir=$1
elif [[ -v node_dir_en ]]; then # environable set,
echo -e "dir specified (in environment vairable):\n\t$node_dir_en\n"
targetDir=$node_dir_en
else # environable not set,
echo "dir not specified, won't execute"
exit
fi
# check whether dir exists,
if [ -d $targetDir ]; then
cd $targetDir
else
echo -e "invalid dir location:\n\t$targetDir\n"
exit
fi
# initial map,
declare -A itemMap
itemMap=( ["ɪ"]="i" ["ː"]=":" ["ɜ"]="ə" ["ɒ"]="ɔ" ["ʊ"]="u" ["ɛ"]="e")
# print item maps,
echo 'maps:'
for key in "${!itemMap[@]}"; do
echo -e "\t$key\t->\t${itemMap[$key]}"
done
echo -e '\n'
# do replace,
for key in "${!itemMap[@]}"; do
grep -rli "$key" * | xargs -i@ sed -i "s/$key/${itemMap[$key]}/g" @
done
echo -e "\nDone."
exit
Ack কমান্ড ব্যবহার করা এইভাবে অনেক দ্রুত হবে:
ack '25 Essex' -l | xargs sed -i 's/The\ fox \jump/abc 321/g'
এছাড়াও যদি অনুসন্ধানের ফলাফলটিতে আপনার একটি সাদা জায়গা থাকে। আপনার এড়াতে হবে
পাইথন উত্সগুলিতে একটি সাধারণ শেবাং ত্রুটি ঠিক করার জন্য আমি একটি উদাহরণ দিচ্ছি।
আপনি গ্রেপ / সেড পদ্ধতির চেষ্টা করতে পারেন। এখানে এমন একটি যা GNU সেডের সাথে কাজ করে এবং গিট রেপো ভাঙবে না:
$ grep -rli --exclude '*.git*' '#!/usr/bin/python' . | xargs -I {} \
gsed -i '' -e 's/#!\/usr\/bin\/python/#!\/usr\/bin\/env python/' {}
অথবা আপনি গ্রেপটাইল ব্যবহার করতে পারেন :)
$ greptile -x .py -l -i -g '#!/usr/bin/env python' -r '#!/usr/bin/python' .
আমি প্রথম স্ক্রিপ্টটি পরীক্ষা করেছি এবং দ্বিতীয়টিও কাজ করা উচিত। পালানোর চরিত্রগুলি সম্পর্কে সতর্ক থাকুন, আমি মনে করি বেশিরভাগ ক্ষেত্রে গ্রেপটাইল ব্যবহার করা আরও সহজ হওয়া উচিত। অবশ্যই, আপনি সেড দিয়ে অনেক আকর্ষণীয় কাজ করতে পারেন এবং এর জন্য এটি xargs ব্যবহার করে আয়ত্ত করা আরও ভাল।
আমি এটি অন্য পোস্ট থেকে পেয়েছি (কোনটি মনে করতে পারে না) এবং সবচেয়ে মার্জিত না হলেও এটি সহজ এবং একজন নবজাতক লিনাক্স ব্যবহারকারী আমাকে ঝামেলা দেয়নি
for i in *old_str* ; do mv -v "$i" "${i/\old_str/new_str}" ; done
আপনার যদি স্পেস বা অন্যান্য বিশেষ অক্ষর থাকে তবে একটি use
for i in *old_str\ * ; do mv -v "$i" "${i/\old_str\ /new_str}" ; done
সাব ডিরেক্টরি ডিরেক্টরিতে স্ট্রিং জন্য **
for i in *\*old_str\ * ; do mv -v "$i" "${i/\old_str\ /new_str}" ; done
একটি সহজ স্ক্রিপ্ট ফাইল ব্যবহার করে একটি সহজ উপায় আছে:
# sudo chmod +x /bin/replace_string_files_present_dir
জিডিট বা আপনার পছন্দের সম্পাদক এ ফাইলটি খুলুন, আমি এখানে জিডিট ব্যবহার করি।
# sudo gedit /bin/replace_string_files_present_dir
তারপরে এডিটরটিতে ফাইলটিতে নিম্নলিখিতটি পেস্ট করুন
#!/bin/bash
replace "oldstring" "newstring" -- *
replace "oldstring1" "newstring2" -- *
#add as many lines of replace as there are your strings to be replaced for
#example here i have two sets of strings to replace which are oldstring and
#oldstring1 so I use two replace lines.
ফাইলটি সংরক্ষণ করুন, জিডিট বন্ধ করুন , তারপরে আপনার টার্মিনালটি থেকে প্রস্থান করুন বা কেবল এটি বন্ধ করুন এবং তারপরে আপনি যুক্ত হওয়া নতুন স্ক্রিপ্টটি লোড করতে সক্ষম হতে এটি শুরু করুন।
আপনি যে ডিরেক্টরিতে সম্পাদনা করতে চান সেখানে ডিরেক্টরিতে নেভিগেট করুন। তারপরে চালান:
#replace_string_files_present_dir
প্রেস লিখুন এবং এই স্বয়ংক্রিয়ভাবে প্রতিস্থাপন করবে oldstring এবং oldstring1 সমস্ত ফাইল যে তাদের সঠিক থাকতে মধ্যে newstring এবং newstring1 যথাক্রমে।
এটি সমস্ত ডিরেক্টরি এবং ফাইলগুলিকে এড়িয়ে যাবে যাতে পুরানো স্ট্রিং থাকে না।
আপনার স্ট্রিং প্রতিস্থাপনের প্রয়োজন এমন ফাইলগুলির একাধিক ডিরেক্টরি থাকলে টাইপিংয়ের ক্লান্তিকর কাজটি দূর করতে সহায়তা করতে পারে। আপনাকে যা করতে হবে তা হ'ল সেই ডিরেক্টরিগুলির প্রত্যেকটিতে নেভিগেট করা, তারপরে চালনা করুন:
#replace_string_files_present_dir
আপনাকে যা করতে হবে তা হ'ল আপনি উপরে প্রতিস্থাপনের মতো প্রতিস্থাপনের সমস্ত স্ট্রিং অন্তর্ভুক্ত বা যুক্ত করেছেন তা নিশ্চিত করা:
replace "oldstring" "newstring" -- *
ফাইলের শেষে / বিন / রিপ্লেস_স্ট্রিং_ফাইলস_প্রিসেন্ট_ডির ।
একটি নতুন প্রতিস্থাপনের স্ট্রিং যুক্ত করতে কেবলমাত্র টার্মিনালে নিম্নলিখিতটি লিখে আমরা তৈরি করা স্ক্রিপ্টটি খুলুন:
sudo gedit /bin/replace_string_files_present_dir
আপনার সংযুক্ত স্ট্রিংগুলির সংখ্যার বিষয়ে চিন্তা করবেন না, যদি পুরানো স্ট্রিংটি পাওয়া না যায় তবে এগুলির কোনও প্রভাব থাকবে না ।
.gitlab-ci.yml
বা একটি বলুন travis.yml
) অন্তর্ভুক্ত করার জন্য একটি কমপ্যাক্ট সংস্করণ চাইবে । পরে এটি সম্পাদন করতে কোনও স্ক্রিপ্ট লেখার সাথে সাথে প্রতিটি ঘুরে দাঁড়ানো একটি বিরোধী প্যাটার্ন, কারণ আপনাকে তখন স্ক্রিপ্ট তৈরির স্ক্রিপ্ট করতে হবে (এবং আমি বেশিরভাগ সময়ই অগোছালো হয়ে যাই)
"" থেকে "" থেকে "প্রতিস্থাপন করুন -` সন্ধান / পাথ / থেকে / ফোল্ডার-টাইপ f` `
(প্রতিস্থাপন - মাইএসকিউএল ডেটাবেস সিস্টেমের একটি স্ট্রিং-রিপ্লেসমেন্ট ইউটিলিটি)