我正在考虑使用find或grep来收集文件,也许是sed进行更改,但是如何处理输出?或者在vim中使用“argdo”会更好吗?
注意:这个问题是要求命令行解决方案,而不是IDE。建议IDE的答案和评论将平静,礼貌和安详地标记。 : - )
答案 0 :(得分:2)
我非常喜欢以下
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是邪恶的,最终会得到你。但是我使用相同的构造来做很多事情,这是我选择的实用刀。
更新:此方法还会备份您应该使用任何方法执行的文件。此外,除了shell的功能外,它不会使用任何东西。您不必为不经常使用的工具慢慢记忆。教一只猴子(并相信我,我有)可以做到这一点很简单。而且你通常足够聪明,因为它需要四秒钟才能完成。
答案 1 :(得分:1)
我建议sed -i
避免担心输出。由于您未指定平台,请查看您的手册页; sed -i
的语义因Linux而异。
答案 2 :(得分:1)
我会使用sed,如果有一个不错的方式,所以“只为第一行做这个”,但我不知道我的头顶一个。为什么不使用perl。类似的东西:
find . -name '*.java' -exec perl -p -i.bak -e '
BEGIN {
print "import package.name.*;\n"
}' {} \;
应该做的工作。查看perlrun(1)
了解详情。
答案 3 :(得分:1)
您可以使用sed
在文件的第一行之前插入一行:
sed -ie "1i import package.name.*;" YourClass.java
使用for循环遍历所有文件并在其上运行此表达式。但是如果你有包,要小心,因为import
语句必须在包声明之后。如果是这种情况,你可以使用更复杂的sed
表达式。
答案 4 :(得分:1)
for i in `ls *java`
do
sed -i '.old' '1 i\
Your include statement here.
' $i
done
应该这样做。 -i执行就地替换和.old保存旧文件以防万一出错。根据需要替换iterator * java(可能是'find。| grep java'或者其他东西。)
答案 5 :(得分:1)
您也可以使用ed命令进行文件内搜索和替换:
# delete all lines matching foobar
ed -s test.txt <<< $'g/foobar/d\nw'
答案 6 :(得分:0)
我实际上是在vim中使用“argdo”开始做的。首先,设置args:
:args **/*.java
“**”遍历所有的子目录,“args”将它们设置为arg列表(就像你启动vim所有这些文件作为vim的参数,例如:vim package1 / One.java package1 /Two.java package2 / One.java)
然后摆弄我需要的任何命令,例如:
:/^package.*$/s/$/\rimport package.name.*;/
“/^package.*$/”充当其后的普通“///”替换的地址; “/ $ /”匹配包的行尾; “\ r”是获取换行符。
现在我可以使用argdo在所有文件上自动执行此操作。我点击“:”,然后uparrow得到上面的行,然后插入“argdo”,它变成:
:argdo /^package.*$/s/$/\rimport package.name.*;/
这个“argdo”将该变换应用于参数列表中的每个文件。
这个解决方案的真正好处在于它并不危险:它实际上还没有改变文件,但我可以看看它们以确认它是否符合我的要求。我可以撤消特定文件,或者我可以退出,如果我不喜欢它做的(BTW:我已经将^ n和^ p映射到:n和:N因此我可以快速浏览文件)。现在,我用“:wa” - “写所有”文件提交它们。
:wa
此时,我仍然可以撤消特定文件,或者根据需要对其进行精细处理。
这种方法可以用于其他重构(例如,在许多文件中更改方法签名并调用它)。
顺便说一句:这很笨拙:“s/$/\rtext/
”......必须有更好的方法从vim的命令行追加文字......