2016-08-19 84 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'或任何其他函數或腳本生成的文件的任何列表。 –

相關問題