2016-08-19 85 views

回答

-1

您可以使用SED此,尝试是这样的:

#!/bin/bash 

for i in $(find ./ -name *.js); 
do 
`sed -i 's/$i \*\//$i \*\/\n&/' "$i"` 
done 

插入带有SED新行可能是一个问题,因为不是所有版本的工作原理相同。要获得概述,请参阅此reference。例如,您可以用G{G;}替换替换部分。这取决于你的sed版本。 类似的问题已经回答herehere

另一个有趣的解决方案:

如果要追加一个新行的第一行后,你也可以使用这个:

sed -i "1a\ " test.js 

因此改变以上脚本代码如下:

#!/bin/bash 

for i in $(find ./ -name *.js); 
do 
`sed -i "1a\ " $1` 
done 
+0

谢谢。我似乎无法得到这从壳脚本内运行。难道我做错了什么?或者是否有我可以从命令行运行的命令? – alidrongo

+0

“类似”意味着“修复所有错误”。 – chepner

+0

你测试了这个脚本吗?你的循环将增加'find','。','-name',然后是当前目录中所有以'* .js'结尾的文件。你也有大写字母“For”,“Do”,“Sed”和“Done”。最后,如果你真的想要插入一行,为什么在'sed'脚本中使用_substitution_? –

0

首先,我们必须找到这些文件:

$ find $folder_name -type f -name "*.js" -print 

这将找到的所有文件与*.js后缀。 type -f意味着只查找文件(只要您有一个目录名称以.js结尾)。我将假定您的JavaScript文件名不包含空格,或者控制名称中的字符如<NL>。否则,我们将不得不做更多的工作。

我们可以使用该find语句来查找所有这些文件,然后我们可以找到这些文件。一旦我们找到这些文件,我们必须弄清楚如何使文件陷入最后的评论行。

我们将采取三步走的办法:

  1. 首先,我们将创建一个有注释行一个新的文件。
  2. 接下来我们将连接新文件末尾的旧文件。
  3. 我们将新文件重命名为旧文件。

第一步,我们将使用echo创建一个带有旧名称的新文件。然后,我们将使用cat命令连接新文件上的旧文件。最后,我们将使用mv重命名为新构建的文件为旧名称。

find $javascript_dir -type f -name "*.js" -print | while read file_name 
do 
    basename=$(basename $file_name) 
    echo "/* $basename */" > "$basename.tmp" 
    cat "$file_name" >> "$basename.tmp" 
    mv "$basename.tmp" "$file_name" 
done 

注意>重定向命令指定的文件的输出,并追加>>命令指定的文件输出。 mv代表移动。在Unix中,文件实际上是通过inode标识来存储的。有一个内容表将inode与文件的全名(包括目录)相匹配。因此,在Unix中移动文件与重命名文件相同,所以目录名称被改变。在Windows批处理中,有单独的moverename命令。在Unix中,它们都是mv


加成

我们可以使用sed在该行的地方预谋做的:

find . -name "*.js" -print | while read file_name 
do 
    basename=$(basename $file_name) 
    sed -i "" "1i\\ 
    /* $basename */ 
    " "$file_name" 
done 

sed是一个功能强大的在线编辑器,大多数人只使用其替代命令模式。然而,sed脚本可能会更复杂和丰富(并且模糊,这就是您很少看到它们的原因)。

0

您可以使用cat -和临时文件:“”

# adds filename to top of each file in $DIR 
DIR=. # set to whatever directory 
FILES=$(find $DIR -type f) 
for FILE in $FILES; do 
    FILE=$(echo $FILE | sed -e s/\.\\\///) # remove leading "./" if DIR is "." 
    echo "/* $FILE */" | cat - $FILE > tempfile.tmp # add the line using a temp file 
    mv tempfile.tmp $FILE # move the temp file back to the original file 
done 

注意,如果DIR没有这将增加相对于DIR文件的完整路径。要只添加文件名本身,您可以使用:

echo "/* $(basename $FILE) */" | cat - $FILE > tempfile.tmp # add the line using a temp file 
+0

如果你打算使用'find'命令,为什么要找到这些文件,然后使用'for'循环来遍历它们?只需在'find'命令的末尾输入'while read'循环。我喜欢将'cat'输送到'echo'命令的末尾。 –

+0

当然,你可以将'find'输出连接到'while read'。为了清晰和可读性,我只是添加了中间FILES变量。文件可以是由'ls','find'或任何其他函数或脚本生成的文件的任何列表。 –

相关问题