मैं जानना चाहता हूं कि मैं लिंक किए गए ट्यूटोरियल में नोटपैड ++ जैसी कई फाइलों में किसी विशिष्ट पाठ को कैसे ढूंढ और बदल सकता हूं।
उदाहरण: http://cybernetnews.com/find-replace-multiple-files/
मैं जानना चाहता हूं कि मैं लिंक किए गए ट्यूटोरियल में नोटपैड ++ जैसी कई फाइलों में किसी विशिष्ट पाठ को कैसे ढूंढ और बदल सकता हूं।
उदाहरण: http://cybernetnews.com/find-replace-multiple-files/
जवाबों:
यहाँ मैं "साइबरनेट" शब्द की हर घटना को "साइबरनेट" के साथ हर फाइल को एक्सटेंशन, सी, डायरेक्टरी, / होम / यूजर / डायरेक्टरी / में बदलने के लिए 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" {} \;
cyber net news
? मैं इसे कैसे बदल सकता हूं cyber net
?
धारा संपादक, sed, इस तरह के काम के लिए एक शक्तिशाली उपयोगिता है और मेरी पहली पसंद है, हालांकि, यदि आप उबंटू आधारित मूल एप्लिकेशन का उपयोग करके एक साधारण पाठ संपादक से ऐसा करना चाहते हैं, तो मेरा सुझाव है कि आप जेडिट पर एक नज़र डालें , यह रिपॉजिटरी में उपलब्ध है और इसे आपके कंसोल में टाइप करके इंस्टॉल किया जा सकता है:
sudo apt-get install jedit
Jedit शुरू करें, मेनू सूची में खोज मेनू आइटम पर क्लिक करें, निर्देशिका आइटम में खोजें पर क्लिक करें, आपको नीचे दिए गए संवाद के साथ प्रस्तुत किया जाएगा:
यह नोटपैड ++ के समान है और वही काम करता है, मेरा मानना है कि यह वही है जो आप चाहते हैं।
sed
।
एक और जीयूआई विकल्प regexxer है :
Geany के साथ जांचें , यह लिनक्स के लिए एकदम सही NPP प्रतिस्थापन है। आप वास्तव में ऐसा कर सकते हैं कि आप रेगेक्स का उपयोग कर सकते हैं।
मैंने सिर्फ इस चीज के लिए थोड़ी स्क्रिप्ट लिखी। यदि आपको केवल मूल बातें चाहिए और सेड आदि से परिचित नहीं हैं, तो यहां देखें: http://www.csrdu.org/nauman/2010/12/30/bash-script-to-find-and-replace-in -एक-सेट-ऑफ-द फ़ाइलें /
स्क्रिप्ट निम्नलिखित है:
for f in submit_*;
do sed "s/old_db_name/new_db_name/" < $f > a_$f ;
mv a_$f $f ;
done
आप इस स्क्रिप्ट का उपयोग कर सकते हैं, कोड की प्रतिलिपि बना सकते हैं और एक फ़ाइल बना सकते हैं 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
एक अन्य कार्यक्रम Searchmonkey है ।
SearchMonkey एक लाइट-वेट Gtk एप्लिकेशन है जिसका उद्देश्य बोझिल खोज / grep को एक स्लीक यूजर इंटरफेस के साथ बदलना है जो जल्दी से मार्क-अप दिखाने के स्थान और टेक्स्ट मैचों की मात्रा प्रदान करता है। लक्ष्य अंत उपयोगकर्ताओं के लिए एक सरल उपयोग और सुलभ उपकरण प्रदान करना है, और सॉफ्टवेयर डेवलपर्स समान है।
find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"
फेडोरा पर मेरे लिए काम करता है
sed
उदाहरण चलाता है ! तो यह CPU समय के मामले में बहुत तेज है। क्योंकि फ़ाइल का उपयोग समय सीमित होगा, मुझे लगता है कि यह घड़ी के समय में बहुत तेज़ नहीं है, लेकिन कम सिस्टम लोड देता है। नोट xargs
बहुत से डाल देगा, जैसे hundereds, एक sed
कमांड के कमांडलाइन पर फ़ाइल नाम का - पथों की लंबाई के आधार पर उपलब्ध बफर आकार को भरना।
+
बजाय \;
में find
, है ना?
xargs
, लेकिन आप सही हैं; से man find
: -exec command {} +
: ... The command line is built in much the same way that xargs...
। मुझे git filter-branch
... की कमांड लाइनों के बारे में सोचता है ;)
एक बहुत ही सरल समाधान: *.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' ./)