Я пытаюсь заменить некоторые аннотации на страницах 'jsp' сценарием bash .
Моя проблема заключается в том, что некоторые файлы случайным образом удаляются, а другие имеют заголовок правильноreplace.
Сценарий:
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 , файл останется нетронутым (в любом случае, кажется, что удаленные файлы содержат этот заголовок)
Любая идеяна что может быть проблема будет принята с благодарностью:)