OPTIONS="d:"
FINDDIR="."
TMPDIR="/tmp/"
TMPFILE="changeText.tmp"
DATE="/bin/date"
FIND="/usr/bin/find"
GREP="/usr/bin/grep"
WC="/usr/bin/wc -l"
CAT="/bin/cat"
RM="/bin/rm -f"
CP="/usr/bin/cp"
while getopts $OPTIONS opt $@ ;do
case "$opt" in
d)
if [ -d $OPTARG ]; then
FINDDIR=$OPTARG
else
echo "指定したディレクトリが存在しません" 1>&2
exit -1
fi
;;
*) exit -1 ;;
esac
done
shift $(( $OPTIND -1 ))
if [ $# -eq 0 ]; then
echo "検索,置換文字列が指定されていません" 1>&2
exit -1
elif [ $# -eq 1 ]; then
echo "置換の文字列が指定されていません" 1>&2
exit -1
elif [ $# -eq 2 ]; then
SEARCHSTRING="$1"
REPLACESTRING="$2"
else
echo "オプションが多いです" 1>&2
exit -1
fi
DATETIME=$(LAND=C;$DATE "+%Y-%m-%d-%X")
TMPFILE1="${TMPDIR}${TMPFILE}1.$DATETIME"
TMPFILE2="${TMPDIR}${TMPFILE}2.$DATETIME"
TMPFILE3="${TMPDIR}${TMPFILE}3.$DATETIME"
$FIND $FINDDIR -name "*.txt" > "$TMPFILE1"
while read filename ; do
if [ -f "$filename" ]; then
"$GREP" "$SEARCHSTRING" "$filename" > "$TMPFILE2"
wc1=$($CAT "2" | $WC)
wc2="${wc1// }"
if [ 0 -lt $wc1 ]; then
$CP /dev/null "$TMPFILE3"
while read line ; do
line="${line//${SEARCHSTRING}/${REPLACESTRING}}"
echo "$line" >> "$TMPFILE3"
done < "$filename"
CP "$TMPFILE3" "$filename"
echo -e "ファイル ${filename} には文字列 ${SEARCHSTRING} \
を含む行が${wc1}行があったので ${REPLACESTRING} に置き換えました"
fi
fi
done < "$TMPFILE1"
if [ -f "$TMPFILE1" ]; then
$RM "$TMPFILE1"
fi
if [ -f "$TMPFILE2" ]; then
$RM "$TMPFILE2"
fi
if [ -f "$TMPFILE3" ]; then
$RM "$TMPFILE3"
fi