使用grep插入文本

时间:2011-12-15 07:51:20

标签: macos shell

我在目录中有大量的java文件,并且如果他们已经没有它们,则希望在其中插入包声明。我可以用grep完成吗?如果是,请告诉我怎么做?

感谢。

2 个答案:

答案 0 :(得分:1)

不,你不能。 grep被正式描述为print lines matching a pattern

它是一个过滤器,它不输出任何已经存在的东西(但它可能输出更少)。特别是,它将无法输出缺少的包声明。但是,您可以使用它来测试文件是否具有包声明:

 <insert your favorite "for each java file" statement>
   if egrep -q "^package " $file; then
     <insert command to insert package declaration> $file
   fi
 <end loop>

你可能正在寻找awk,虽然perl也是一个受欢迎的选择。

答案 1 :(得分:1)

尝试:

#!/bin/tcsh

foreach a ( `ls *.java` )

    cat ${a} | awk 'BEGIN {P=0} /package/ {P=1} /import/ {if (P == 0) {P=1;print "package X;"}} {print}' > t1
    mv t1 ${a}

end

它会查找单词packageimport 如果它在import之前看到package,则会打印“包X”。