سؤال

كيف يمكنني العثور على سلسلة أو استبدال سلسلة الأوامر في ملفات متعددة على UNIX؟

هل كانت مفيدة؟

المحلول

هناك العديد من الطرق. ولكن واحدة من الإجابات سيكون:

find . -name '*.html' |xargs perl -pi -e 's/find/replace/g'

نصائح أخرى

مثل محلول غيبوبة (وأسرع أفترض) ولكن مع سيد (قياسي في العديد من Distros و OSX) بدلا من بيرل:

find . -name '*.py' | xargs sed -i .bak 's/foo/bar/g'

هذا سوف يحل محل الكل فور تحدث في ملفات Python الخاصة بك أسفل الدليل الحالي مع شريط وإنشاء نسخة احتياطية لكل ملف مع .py.bak. تمديد.

وإزالة ملفات de .bak:

find . -name "*.bak" -delete

أنا دائما فعلت ذلك مع إد نص البرامج النصية أو النصوص السابقة.

for i in "$@"; do ex - "$i" << 'eof'; done
%s/old/new/
x
eof

ال السابق الأمر هو مجرد وضع السطر من السادس.

باستخدام Find و Sed مع الاسم أو الدلائل مع استخدام المساحة هذا:

find . -name '*.py' -print0 | xargs -0 sed -i 's/foo/bar/g'

مع قذيفة باش الأخيرة، والافتراض أنك لا تحتاج إلى اجتياز الدلائل

for file in *.txt
do
while read -r line
do
    echo ${line//find/replace} > temp        
done <"file"
mv temp "$file"
done 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top