ما هي أداة سطر أوامر GNU/Linux التي سأستخدمها لإجراء بحث واستبدال في ملف؟
سؤال
ما هي أداة سطر أوامر GNU/Linux التي سأستخدمها لإجراء بحث واستبدال في ملف؟
هل يمكن تحديد نص البحث والاستبدال بتنسيق regex؟
المحلول
sed 's/a.*b/xyz/g;' old_file > new_file
جنو سيد (الذي ربما يكون لديك) أكثر تنوعًا:
sed -r --in-place 's/a(.*)b/x\1y/g;' your_file
وفيما يلي شرح موجز لهذه الخيارات:
-i[SUFFIX], --in-place[=SUFFIX]تحرير الملفات في مكانها (عمل نسخة احتياطية في حالة توفير الامتداد)
-r، --regexp-extatedاستخدام التعبيرات العادية الموسعة في البرنامج النصي.
ال فري بي إس دي يدعم الإصدار أيضًا هذه الخيارات.ال نت بي إس دي و أوبن بي إس دي دعم الإصدارات فقط -r
.
إذا كنت تريد معرفة المزيد عن sed، كوري وقد اقترح هذا البرنامج التعليمي.
نصائح أخرى
وبيرل لذلك:
perl -pi -e 's/foo/bar/g;' *.txt
وأي عادي الصورة /// نمط في تلك علامات الاقتباس المفردة. يمكنك الاحتفاظ بنسخة احتياطية مع شيء من هذا القبيل:
perl -pi.bak -e 's/foo/bar/g;' *.txt
وأو خط أنابيب:
cat file.txt | perl -ne 's/foo/bar/g;' | less
ولكن هذا العمل في الحقيقة أكثر الحوار الاقتصادي الاستراتيجي.
والنظر روبي كبديل للبيرل. ومن سرق معظم وسائط سطر الأوامر أونيلينير بيرل (-i
، -p
، -l
، -e
، -n
) والسيارات مجموعات $_
لك مثل بيرل يفعل ويمتلك الكثير من الخير التعابير المنطقية. بالإضافة إلى ذلك جملة روبي قد تكون أكثر راحة وأسهل في القراءة أو الكتابة من على بيرل أو لااا. (أم لا، اعتمادا على ذوقك).
وruby -pi.bak -e '$_.gsub!(/foo|bar/){|x| x.upcase}' *.txt
ومقابل.
وperl -pi.bak -e 's/(foo|bar)/\U\1/g' *.txt
في كثير من الحالات عند التعامل مع المتشددين واحد، والأداء ليس كافيا من قضية لرعاية ما إذا كنت تستخدم خفيفة الوزن بيرل سد أو الوزن الثقيل أو heaveier الوزن روبي. استخدام كل ما هو أسهل في الكتابة.
ااا أو محرر تيار، ونعم، ويستخدم التعابير المنطقية.