আপনি যদি কোনও স্ক্রিপ্ট চালাতে সক্ষম হন তবে আমি এখানে একই জাতীয় পরিস্থিতির জন্য যা করেছি:
sed
কমান্ডের জন্য অভিধান / হ্যাশম্যাপ (এসোসিয়েটিভ অ্যারে) এবং ভেরিয়েবলগুলি ব্যবহার করে আমরা কয়েকটি স্ট্রিং প্রতিস্থাপন করতে অ্যারের মধ্য দিয়ে লুপ করতে পারি। একটি ওয়াইল্ডকার্ড অন্তর্ভুক্ত name_pattern
করার সাথে name_pattern='File*.txt'
একটি নির্দিষ্ট ডিরেক্টরিতে ( source_dir
) একটি প্যাটার্ন (এটি এমন কিছু হতে পারে ) দিয়ে ফাইলগুলিতে স্থানের স্থান প্রতিস্থাপন করবে । সমস্ত পরিবর্তন লেখা রয়েছে logfile
এdestin_dir
#!/bin/bash
source_dir=source_path
destin_dir=destin_path
logfile='sedOutput.txt'
name_pattern='File.txt'
echo "--Begin $(date)--" | tee -a $destin_dir/$logfile
echo "Source_DIR=$source_dir destin_DIR=$destin_dir "
declare -A pairs=(
['WHAT1']='FOR1'
['OTHER_string_to replace']='string replaced'
)
for i in "${!pairs[@]}"; do
j=${pairs[$i]}
echo "[$i]=$j"
replace_what=$i
replace_for=$j
echo " "
echo "Replace: $replace_what for: $replace_for"
find $source_dir -name $name_pattern | xargs sed -i "s/$replace_what/$replace_for/g"
find $source_dir -name $name_pattern | xargs -I{} grep -n "$replace_for" {} /dev/null | tee -a $destin_dir/$logfile
done
echo " "
echo "----End $(date)---" | tee -a $destin_dir/$logfile
প্রথমত, জোড়া অ্যারে ঘোষিত হয়, প্রতিটি জোড়া একটি প্রতিস্থাপন স্ট্রিং, তাহলে তোমরা WHAT1
জন্য প্রতিস্থাপন করা হবে FOR1
এবং OTHER_string_to replace
জন্য প্রতিস্থাপন করা হবে string replaced
ফাইলের মধ্যে File.txt
। লুপে অ্যারেটি পড়ে, জোড়ার প্রথম সদস্যটি পুনরুদ্ধার করা হয় replace_what=$i
এবং দ্বিতীয়টি হিসাবে replace_for=$j
। find
কমান্ড অনুসন্ধান ডিরেক্টরির মধ্যে ফাইলের নাম (যে একটি ওয়াইল্ড কার্ড থাকতে পারে) এবং sed -i
একই ফাইল (গুলি) কি পূর্বে নির্ধারিত ছিল কমান্ড প্রতিস্থাপন করে। অবশেষে আমি grep
ফাইলগুলিতে করা পরিবর্তনগুলি লগ করতে লগফাইলে পুনর্নির্দেশ যুক্ত করেছি ।
এটি আমার পক্ষে কাজ করেছে GNU Bash 4.3
sed 4.2.2
এবং ভাস্যনাভিকভের জবাবের উপর ভিত্তি করে লুপ ওভার ব্যাশ-এ টিপলস নিয়েছে ।
sed -i 's/abc/xyz/g' xa*
?