একাধিক ফাইলের মধ্যে পাঠ্য সন্ধান করুন এবং প্রতিস্থাপন করুন


84

আমি কীভাবে লিঙ্কযুক্ত টিউটোরিয়ালে নোটপ্যাড ++ এর মতো একাধিক ফাইলের মধ্যে একটি নির্দিষ্ট পাঠ খুঁজে পেতে এবং প্রতিস্থাপন করতে পারি তা জানতে চাই।

উদাহরণস্বরূপ: http://cybernetnews.com/find-replace-mpleple-files/


এতে গ্রাফিকাল ইন্টারফেস থাকবে না তবে আমি আপনাকে সিড (ম্যান সেড) পরীক্ষা করার জন্য অনুরোধ করব। এটি ইউএনআইএক্সের শুরু থেকেই স্রষ্টার সম্পাদক।
অ্যাপলিনস্কি

উত্তর:


136

এখানে আমি "সাইবারনেটনিউজ" শব্দের প্রতিটি ঘটনাকে প্রতি ফাইলের "সাইবারনেট" এর সাথে এক্সটেনশন, সি, ডিরেক্টরিতে, / হোম / ব্যবহারকারী / ডিরেক্টরি / সাথে প্রতিস্থাপন করতে ব্যবহার করব sed

find /home/user/directory -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;

আরও সাধারণ প্রকরণ যেখানে আপনি এক্সিকিউটিভের ডিরেক্টরি থেকে পুনরাবৃত্তভাবে অনুসন্ধান করেন এবং কেবল নিয়মিত, পাঠযোগ্য, লিখনযোগ্য ফাইলগুলিতে পরিচালনা করেন:

find ./ -type f -readable -writable -exec sed -i "s/cybernetnews/cybernet/g" {} \;

2
এটির পক্ষে ভোট দেওয়া কারণ এটি এমন একটি দক্ষ পদ্ধতি
সাবলাক

4
ভোট দেওয়া হয়েছে কারণ সেডই সেরা পছন্দের আইএমও, তবে উত্তরটি আরও কার্যকর হবে যদি আপনি উত্তরের উপাদানগুলি ব্যাখ্যা করেন (ব্যক্তিগতভাবে, আমি {} with; এর সাথে পরিচিত এবং কৌতূহলী নই;)
সিকোয়া এমসিডোভেল

5
নিবন্ধন করুন আমি এটা মিস! দুঃখিত। ধনুর্বন্ধনী এর অর্থ মূলত "প্রতিটি ম্যাচের জন্য" এবং পালানো সেমি-কোলন (\;) হ'ল ডাবল পার্সিং রোধ করা। আমরা বোর্ন-সামঞ্জস্যপূর্ণ শেল এবং সেড কমান্ডটি বিশ্লেষণ করার চেষ্টা করতে চাই না, কেবল সেড।

@ খ্রিস্টোফার শব্দটির মতো জায়গাগুলি থাকলে এটি কীভাবে কাজ করবে cyber net news? আমি কীভাবে এটিকে রূপান্তর করতে cyber netপারি?
খুরশিদ আলম

1
@ খুরশিদআলাম -ই সুইচ সহ চরিত্রের শ্রেণিটি ব্যবহার করুন:sed -i -e "s/cyber\snet\snews/cyber net/g"

27

স্ট্রিম এডিটর, সেড, এই ধরণের কাজের জন্য একটি শক্তিশালী ইউটিলিটি এবং এটি আমার প্রথম পছন্দ, তবে আপনি যদি কোনও উবুন্টু ভিত্তিক নেটিভ অ্যাপ্লিকেশন ব্যবহার করে কোনও সাধারণ পাঠ্য সম্পাদক থেকে এটি করতে চান তবে আমি আপনাকে জেদিতের দিকে একবার নজর দেওয়ার পরামর্শ দেব , এটি সংগ্রহস্থলগুলিতে উপলভ্য এবং আপনার কনসোলে টাইপ করে ইনস্টল করা যেতে পারে:

sudo apt-get install jedit

শুরু করুন

ফোল্ডার সংলাপে জেডিট অনুসন্ধান করুন

এটি নোটপ্যাড ++ এর মতো এবং একই জিনিসটি করে, আমি বিশ্বাস করি এটি আপনি চান এটি।


আমি যখন কোডের পুরো লাইনটি অনুসন্ধান করছিলাম তখন এটি উপযুক্ত ছিল এবং যদি আমি একই জিনিসটি করে থাকি তবে প্রতিটি রেগেক্স-বিশেষ চরিত্রের হাত থেকে বাঁচতে দ্বিধাগ্রস্ত ছিলাম sed
আইকিউ আন্দ্রেয়াস

আপনি কোড ব্লক (যেমন এইচটিএমএল, জাভাস্ক্রিপ্ট, ইত্যাদি) সেকেন্ডে প্রতিস্থাপন করতে পারেন।
লিপ

এটি প্রচুর সংখ্যক ফাইলে কাজ করে না, কয়েক ঘন্টা পরে এটি একটি প্রতিস্থাপন করেনি, অন্যদিকে জিয়ন সমস্ত ঘটনা খুঁজে পেতে কয়েক মিনিট সময় নেয়। এটি কোনও কার্যকর অনুসন্ধান এবং প্রতিস্থাপন নাও হতে পারে তবে এটি ঘরটিকে সুন্দরভাবে উষ্ণ করেছে।
মার্ক অরোনি

19

আর একটি জিইউআই বিকল্প হ'ল রেজিএক্সএক্সার : regexxer স্ক্রিনশট


পুরোপুরি কাজ করে (যদি আপনি ইতিমধ্যে রেজেক্সের সাথে পরিচিত হন), আপনাকে ধন্যবাদ।
আর্নেস্ট

1
এমনকি, আপনি যদি রেজেক্স না জানেন তবে আপনি এই সরঞ্জামটিকে একটি সাধারণ স্ট্রিং অনুসন্ধান এবং প্রতিস্থাপনের সরঞ্জাম হিসাবে ব্যবহার করতে পারেন এবং এটি আপনার জন্য কাজ করবে, রেজেক্স বা কোনও কিছুর প্রয়োজন নেই।
মোহাম্মদ আবদুল মুজিব

13
perl -pi -e 's/oldtext/newtext/g' *

বর্তমান ফোল্ডারের সমস্ত ফাইলে নতুন পাঠ্য দ্বারা পুরানো পাঠের যে কোনও উপস্থিতি প্রতিস্থাপন করে। তবে আপনাকে ব্যাকস্ল্যাশ ব্যবহার করে ওল্ড টেক্সট এবং নিউ টেক্সটের মধ্যে থাকা সমস্ত পার্ল বিশেষ অক্ষরগুলি এড়িয়ে যেতে হবে।


9

জিনির সাথে পরীক্ষা করুন , এটি লিনাক্সের জন্য উপযুক্ত এনপিপি প্রতিস্থাপন replacement আপনি ঠিক সেই প্লাসটি করতে পারেন আপনি পুনরায় ব্যবহার করতে পারেন।


আমি গ্যানিকে ভালোবাসি! এটি আমার প্রিয় সম্পাদক এবং যথেষ্ট শক্তিশালী।
পিসু

1
আমি যতদূর বলতে পারি, জেনি ১.২৩.১.১ (উবুন্টু ১৩.১০ এর সাথে প্যাকেজড) একাধিক ফাইল রিজেক্স ব্যবহার করে অনুসন্ধান করার অনুমতি দেয়, তবে সেগুলি প্রতিস্থাপন করে না।
ড্র নোকস

আপনি সবগুলি খুললে এবং তারপরে অনুসন্ধান / প্রতিস্থাপনের কথোপকথনে "সেশন ইন" বোতামটি ব্যবহার করে আপনি জিনিকে একাধিক ফাইল সন্ধান এবং প্রতিস্থাপন করতে পারেন।
এমভি

1
আপনি কীভাবে বার্তা ট্যাবে তালিকাভুক্ত 5000 টি ফাইল খুলবেন?
মার্ক অরনি

1
ঠিক আছে, রেজজেক্সার আমার কাছে যা চেয়েছিল তা অনেকটাই ছিল, এর নাম রেজেক্স থাকার কারণে আমি কেবল এটিকে এড়িয়ে গিয়েছিলাম এবং আমি কেবল রেইগেক্সের সাথে কিছু করার এড়ানোর প্রবণতা রাখি। তবে আমি ভুল ছিলাম, অ্যাডন that সরঞ্জামটিতে অনুসন্ধান এবং প্রতিস্থাপনের জন্য যা প্রয়োজন তা ঠিক আছে।
মোহাম্মদ আবদুল মুজিব

3

আমি শুধু এই জিনিসটির জন্য একটি ছোট স্ক্রিপ্ট লিখেছি। আপনার যদি কেবলমাত্র বেসিকগুলির প্রয়োজন হয় এবং সেড ইত্যাদির সাথে পরিচিত না হন তবে এখানে একবার দেখুন: http://www.csrc.org/nauman/2010/12/30/bash-script-to-find-and-replace-in -a-সেট-ফাইল /

লিপিটি নিম্নলিখিত:

for f in submit_*;
  do sed "s/old_db_name/new_db_name/" < $f > a_$f ;
  mv a_$f $f ;
done

2

আপনি এই স্ক্রিপ্টটি ব্যবহার করতে পারেন, কোডটি অনুলিপি করুন এবং একটি ফাইল তৈরি করতে পারেন find_and_replace_in_files.sh

আমি এটিকে কিছুটা সংশোধন করেছি; আপনার মতামত আমাকে বলুন

# *****************************************************************************************
# find_and_replace_in_files.sh
# This script does a recursive, case sensitive directory search and replace of files
# To make a case insensitive search replace, use the -i switch in the grep call
# uses a startdirectory parameter so that you can run it outside of specified directory - else this script will modify itself!
# *****************************************************************************************

!/bin/bash
# **************** Change Variables Here ************
startdirectory="/your/start/directory"
searchterm="test"
replaceterm="test=ok!"
# **********************************************************

echo "***************************************************"
echo "* Search and Replace in Files Version 01-Aug-2012 *"
echo "***************************************************"

i=0; 

  for file in $(grep -l -R $searchterm $startdirectory)
    do
      cp $file $file.bak
      sed -e "s/$searchterm/$replaceterm/ig" $file > tempfile.tmp
      mv tempfile.tmp $file

    let i++;

      echo "Modified: " $file
    done

echo " *** All Done! *** Modified files:" $i

2

আরেকটি প্রোগ্রাম হ'ল সার্চমনকি

সার্চমনকি একটি হালকা ওজনের জিটিকে অ্যাপ্লিকেশন যার লক্ষ্য হল চটজলদি অনুসন্ধান / গ্রেপকে একটি চটজলদি ব্যবহারকারীর ইন্টারফেসের সাথে প্রতিস্থাপন করা যা দ্রুত স্থান এবং পাঠ্য মিলগুলির পরিমাণ প্রদর্শন করে একটি মার্ক-আপ সরবরাহ করে। লক্ষ্যটি হ'ল শেষ ব্যবহারকারী-ও সফ্টওয়্যার বিকাশকারীদের জন্য ব্যবহারের জন্য সহজ এবং অ্যাক্সেসযোগ্য অনুসন্ধান সরঞ্জাম সরবরাহ করা।


2
find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"

ফেডোরাতে আমার জন্য কাজ করে


আপনি একটি লাইন ব্যাখ্যা কিভাবে এই ওভার উন্নত যোগ করতে পারিনি askubuntu.com/a/84013/158442
muru

@ মুরু এটি অনেক কম sedউদাহরণ চালায় ! সুতরাং এটি সিপিইউ সময়ের নিরিখে অনেক দ্রুত। কারণ ফাইল অ্যাক্সেসের সময় সীমাবদ্ধ থাকবে, আমি মনে করি এটি ঘড়ির সময় খুব বেশি দ্রুত নয়, তবে নিম্ন সিস্টেমের লোড দেয়। নোটটি xargsএকক sedকমান্ডের কমান্ডলাইনে ফাইল নামগুলির মতো হান্ডার্ডারদের মতো প্রচুর পরিমাণে রাখবে - পাথের দৈর্ঘ্যের ভিত্তিতে উপলব্ধ বাফার আকারটি পূরণ করবে filling
ভোলকার সিগেল

হুম ... যদি এটি বন্ধ হয়ে যায় তবে আমি এটিকে প্রতিস্থাপন করতে পারব কেন এটি আপ্টভোটডের চেয়ে ভাল why
ভোলকার সিগেল

@ ভোলকারসিগেল যা ঠিক আছে +তার পরিবর্তে অর্জন করা যায় ? \;find
মুরু

1
@ মুরু সম্ভবত ... আমার "কাজের জন্য দৃth় সরঞ্জাম" - ইনস্টিন্ট পরিষ্কারভাবে পছন্দ করে xargsতবে আপনি ঠিক বলেছেন; থেকে man find: -exec command {} +: ... The command line is built in much the same way that xargs...। আমাকে git filter-branch...;) এর কমান্ডের লাইনগুলি সম্পর্কে ভাবিয়ে তোলে
ভোলকার সিগেল

2

খুব সহজ সমাধান: সব প্রতিস্থাপন *.txtফোল্ডারে ফাইল string_1সঙ্গে string_2:

sed -i 's/string_1/string_2/g' *.txt

দুর্দান্ত উত্তর! মাত্র কিছু সংযোজন। যদি আপনি বর্তমান ডিরেক্টরিটির যে কোনও ফাইলটিতে পুনরাবৃত্তভাবে স্ট্রিং প্রতিস্থাপন করতে চান তবে এটি চেষ্টা করুন:sed -i 's/string_1/string_2/g' $(grep -rEl 'string_1' ./)
শ্রুগান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.