파일에서 라인 지우는 스크립트
글쓴이: kenshin.1223 / 작성시간: 화, 2006/03/28 - 2:58오후
#!/bin/sh
declare PATTERN
declare -a FILES
declare -i f_count=0
declare -i grep=0
declare -i show_reduced=0
[[ ${#PIPESTATUS[@]} -gt 1 ]] && pipestatus=1 || pipestatus=0
# Prevent aliases from causing portage to act inappropriately.
# Make sure it's before everything so we don't mess aliases that follow.
unalias -a
# Setup the colors so our messages all look pretty - from baselayout(functions.sh)
GOOD=$'\e[32;01m'
WARN=$'\e[33;01m'
BAD=$'\e[31;01m'
HILITE=$'\e[36;01m'
BRACKET=$'\e[34;01m'
NORMAL=$'\e[0m'
ewran() {
if [[ ${RC_QUIET_STDOUT} == "yes" ]] ; then
echo " $*"
else
echo -e " ${WARN}*${NORMAL} ${RC_INDENTATION}$*"
fi
return 0
}
eerror() {
if [[ ${RC_QUIET_STDOUT} == "yes" ]] ; then
echo " $*" >/dev/stderr
else
echo -e " ${BAD}*${NORMAL} ${RC_INDENTATION}$*"
fi
}
declare -i total_bytes_reduced=0
__reduced_size() {
[[ $show_reduced -eq 1 ]] || return 1
local file_before="$1"
local file_after="$2"
local bytes_before=0
local bytes_after=0
local reduced=-1
bytes_before=`stat --format '%s' "$file_before"`
bytes_after=`stat --format '%s' "$file_after"`
reduced=$(( $bytes_before - $bytes_after ))
total_bytes_reduced=$(( $total_bytes_reduced + $reduced ))
echo "the size of '${file_before}' that is reduced in byte from ${bytes_before} to ${bytes_after}"
return 0
}
add_file() {
local f="$1"
if [ ! -e "$f" ]; then
ewran "${f} was not found"
return 1
fi
let f_count++
FILES[$f_count-1]=$f
return 0
}
declare chk_buff
chk_aleady_exists() {
local fn="$1"
if [ $f_count -eq 0 ]; then
add_file $fn
return 0
elif [ "$chk_buff" = "$fn" ]; then
return 1
elif [ -z $chk_buff ]; then
chk_buff=$fn
fi
for f in ${FILES[@]}; do
if [ "$fn" = "$f" ]; then
return 1
fi
done
add_file $fn
chk_buff=
}
filename_from_pipeline() {
local f
[[ $pipestatus -eq 0 ]] && return 0
while read f && [[ -n $f ]]; do
if [ $grep -eq 1 ]; then
f=`echo "$f" | cut -f1 -d':'`
fi
chk_aleady_exists "$f"
done
}
process_arguments() {
while getopts gsf: opt; do
case $opt in
g) grep=1 ;;
s) show_reduced=1 ;;
f) chk_aleady_exists $OPTARG ;;
esac
done
filename_from_pipeline
if [ $OPTIND -gt $BASH_ARGC ]; then
eerror "the pattern is not given"
exit 1
elif [ -z ${BASH_ARGV[`let $BASH_ARGC-$OPTIND`]} ]; then
eerror "the pattern is not given"
exit 1
else
PATTERN=${BASH_ARGV[0]}
fi
}
main() {
process_arguments $@
if [ $f_count -eq 0 ]; then
ewran "the target file is not given"
exit 0
fi
for f in ${FILES[@]}; do
ff=`echo $f | md5sum | cut -f1 -d' '`
sed -e "/${PATTERN}/d" $f > "/dev/shm/${ff}"
__reduced_size $f "/dev/shm/${ff}"
mv -f "/dev/shm/${ff}" $f
done
}
if [ $# -lt 1 ]; then
exit 1
fi
main $@텍스트 파일에서 특정 내용이 들어간 줄을 지워주는 스크립트입니다.
사용방법
파일이름 - delline.sh
옵션 -
-f 파일이름
-s 줄어든 바이트수 표시
-g : find -type f | xargs grep '????' | delline.sh '????'
위와 비슷한 형식으로 사용할 때 선택하는 옵션입니다.
기본적인 사용방법은 아래와 같습니다.
delline.sh -f 파일 [ -f 파일 ..] '내용'
오늘 재미삼아 연습삼아 만들어 본 스크립트 입니다. -__-;
심심해서 올려 봤습니다. =3==3;
Forums:


음....특정
음....
특정 내용들어간거 지우는거라구요?
그런거라면..
cat 파일명 | grep -v "어쩌고..저쩌고.." > 새파일명
이정도로도 되지않나요?
----------------------------------------------------------------------------