1
我想通過bash腳本替換'jsp'頁面中的一些註釋。sed隨機返回空字符串
我的問題是,隨機地擦除了一些文件,而其他文件則正確替換了文件頭。
腳本:
echo "Processed Files:" > processedFiles.txt
for f in $(find . -name "*.jsp")
do
#Check if the file contains the doctype
htmlPage=`cat $f | grep "<!DOCTYPE HTML PUBLIC \"-\/\/W3C\/\/DTD HTML 4.0 Strict\/\/EN\">"`
oldHtmlPage=`cat $f | grep "<!DOCTYPE HTML PUBLIC \"-\/\/W3C\/\/DTD HTML 3.2\/\/EN\">"`
if [ ${#htmlPage} -gt 0 ] || [ ${#oldHtmlPage} -gt 0 ]
then
echo processing $f
# if read only, allow us to write on it
rdonly=0
if [ ! -w "$f" ]
then
chmod +w "$f"
rdonly=1
fi
# replace headers
if [ ${#htmlPage} -gt 0 ]
then
cat "$f" | sed 's/<!DOCTYPE HTML PUBLIC "-\/\/W3C\/\/DTD HTML 4.0 Strict\/\/EN">/<!DOCTYPE html>/g' > "$f"
fi
if [ ${#oldHtmlPage} -gt 0 ]
then
cat "$f" | sed 's/<!DOCTYPE HTML PUBLIC "-\/\/W3C\/\/DTD HTML 3.2\/\/EN\">/ /g' > "$f"
fi
# add file to list of processed
echo $f'\n' >> processedFiles.txt
# restore read only
if [ $rdonly -eq 1 ]
then
chmod -w $f
fi
else
# jsp without html doctype declaration
echo ignoring $f
fi
done
當執行在某些情況下,內容是正確的更換sed的命令,但在其他的全部內容被擦除,因此該文件到我注入的代碼變空了。
我認爲,由於包含要被替換的報頭中的如果條件,只有文件進入這個邏輯路徑,我看到擦拭文件和表現爲預期的文件之間沒有差異。
我認爲,如果一個文件不匹配sed的表達該文件將保持不變(在任何情況下擦拭文件似乎包含頭)
什麼可問題是會有什麼想法不勝感激:)
哈哈不用擔心,腳本運行在svn託管的文件夾上,回滾很容易:)而且你是對的,tmp文件+ mv做的伎倆。太感謝了! :P – 2012-02-24 08:48:12