باستخدام سطر أوامر Bash ، كيفية إضافة "import package.name.*؛" للعديد من ملفات جافا؟

StackOverflow https://stackoverflow.com/questions/1025116

سؤال

أفكر في استخدام find أو grep لتجميع الملفات، وربما sed لإجراء التغيير، ولكن ماذا أفعل بالمخرجات؟أم أنه من الأفضل استخدام "argdo" في vim؟

ملحوظة:هذا السؤال يطرح حلول سطر الأوامر، وليس حلول IDE.سيتم وضع علامة على الإجابات والتعليقات التي تقترح IDE بهدوء وأدب وهدوء.:-)

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

المحلول

ويمكنك استخدام sed لإدراج سطر قبل السطر الأول من الملف:

sed -ie "1i import package.name.*;" YourClass.java

واستخدام لحلقة لتكرار خلال كافة الملفات وتشغيل هذا التعبير عليها. ولكن كن حذرا إذا كان لديك حزم، لأن البيانات import يجب أن يكون بعد إعلان الحزمة. يمكنك استخدام تعبير sed أكثر تعقيدا، وإذا كان هذا هو الحال.

نصائح أخرى

أنا معجب كبير بما يلي

export MYLIST=`find . -type f -name *.java`
for a in $MYLIST; do
   mv $a $a.orig
   echo "import.stuff" >> $a
   cat $a.orig >> $a
   chmod 755 $a 
done;

mv شرير وهذا في النهاية سوف ينال منك.لكنني أستخدم نفس التصميم في الكثير من الأشياء وهو سكيني المفضل.

تحديث: تقوم هذه الطريقة أيضًا بعمل نسخة احتياطية من الملفات التي يجب عليك القيام بها باستخدام أي طريقة.بالإضافة إلى أنه لا يستخدم أي شيء سوى ميزات الصدفة.ليس عليك تنشيط ذاكرتك بشأن الأدوات التي لا تستخدمها كثيرًا.إنه أمر بسيط بما فيه الكفاية لتعليم القرد (وصدقني لقد فعلت ذلك).وأنت بشكل عام حكيم بما يكفي لرميها بعيدًا لأن كتابتها استغرقت أربع ثوانٍ.

وأنا أقترح sed -i لتفادي الحاجة إلى القلق بشأن الانتاج. منذ لم تقم بتحديد النظام الأساسي الخاص بك، والتحقق من صفحات رجل الخاص بك؛ تختلف دلالات sed -i من لينكس لBSD.

وأود أن استخدام ااا إذا كانت هناك طريقة لائقة لذلك "قيام بذلك للخط الأول فقط" ولكن أنا لا أعرف من مرة واحدة من أعلى رأسي. لماذا لا تستخدم بيرل بدلا من ذلك. شيء من هذا القبيل:

find . -name '*.java' -exec perl -p -i.bak -e '
    BEGIN {
      print "import package.name.*;\n"
    }' {} \;

وينبغي القيام بهذه المهمة. تحقق perlrun(1) للحصول على مزيد من التفاصيل.

for i in `ls *java`
do 
  sed -i '.old' '1 i\
  Your include statement here.
  ' $i
done

ويجب أن تفعل ذلك. -i لا أحد في مكان الغيار و.OLD يحفظ الملف القديم في حال سارت الامور بشكل سيء. استبدال مكرر * جافا الضرورة (ربما 'البحث |. البقرى جافا. أو شيئا بدلا من ذلك)

ويمكنك أيضا استخدام الأمر إد القيام به البحث في الملفات واستبدال:

# delete all lines matching foobar 
ed -s test.txt <<< $'g/foobar/d\nw' 

وانظر: http://bash-hackers.org /wiki/doku.php؟id=howto:edit-ed

ولقد البدء فعليا للقيام بذلك باستخدام "argdo" في همة. أولا وقبل كل شيء، وتعيين وسائط:

:args **/*.java

وو"**" يخترق كل subdir، و "وسائط" يحدد لها أن تكون قائمة وسيطة (كما لو كنت بدأت همة مع كل تلك الملفات في كوسائط إلى همة، على سبيل المثال: همة package1 / One.java package1 /Two.java package2 / One.java)

وبعد ذلك عزف مع أي أوامر لست بحاجة لجعل التحويل أريد، على سبيل المثال:

:/^package.*$/s/$/\rimport package.name.*;/

وو"/^package.*$/" بمثابة عنوان للالعاديين استبدال "ليالي ///" التي تليها. و"/ $ /" يطابق نهاية السطر في الحزمة. و"\ ص" هو الحصول على السطر.

والآن أستطيع أن أتمتة هذه على كل الملفات، مع argdo. أنا ضربت ":"، ثم uparrow للحصول على خط أعلاه، ثم إدراج "argdo" بحيث يصبح:

:argdo /^package.*$/s/$/\rimport package.name.*;/

وهذا "argdo" ينطبق التي تحول إلى كل ملف في قائمة الوسائط.

ما هو لطيف حقا عن هذا الحل هو أنه ليست خطيرة: فإنه لم فعلا غيرت الملفات بعد، ولكن يمكنني أن ننظر إليها لتأكيد فعلت ما أردت. يمكنني التراجع عن ملفات معينة، أو يمكنني الخروج إذا كنت لا تحب ما يتم ذلك (راجع للشغل: لقد تعيين ^ ن و ^ p ل: ن و: N حتى أستطيع أن إنطلق بسرعة بسرعة من خلال الملفات). الآن، وأنا ارتكابها مع ": وا" - "أكتب كل" الملفات

.
:wa

وعند هذه النقطة، لا يزال يمكنني التراجع عن ملفات معينة، أو براعة لهم حسب الحاجة.

وهذا النهج نفسه يمكن أن تستخدم لrefactorings الأخرى (مثل تغيير توقيع الأسلوب ويدعو إليها، في العديد من الملفات).


وراجع للشغل: هذا هو أخرق: "s/$/\rtext/" ... يجب أن يكون هناك طريقة أفضل لإلحاق نص من سطر الأوامر همة و...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top