파일 내 검색해야 할 Keyword도 많고..
검색해야 할 파일도 많고..
또 그 결과를 키워드 별로 구분도 해야 하고..
하나하나씩 find 명령어를 실행시켜 검색을 하기가 껄끄러워 쉘 스크립트를 만들어 보았다.
몇 줄 안되지만 ShellScript 보기만 했지 직접 만들어보니.. 여간 힘들었다.
1. Make Keyword List
- '내가 키워드 목록이다' 라고 구분할 수 있는 의미있는 확장자를 가지게 한다.
ex) MykeywordList.kwd
- 키워드 목록 내용은 별다른게 없다 아래와 같이 키워드를 '한줄 한줄' 구분해주면 된다.
2. Config
스크립트가 너무 길어지는걸 방지하기 위해 필요한 변수들을 환경변수처럼 만들었다.
3. ShellScript
검색내용 추출부분은 필요에 의해 작성한거라 크게 신경쓸 필욘 없다.
단, 변수의 내용을 조작(?) 하는 부분은 유용하게 쓰이는 부분이라 숙지하여야 할 필요가 있다.
출처 : http://www.insford.com/wiki/Wiki.jsp?page=Shell%20Script
위 사이트에 ShellScript에 대한 기본적인 내용이 잘 정리되어 있어 참고하시길 바랍니다.
참고로 아래의 find 문은 파일명에 공백이 포함되어 있을시 파일내용을 검색 할 수 있다.
** 공백이 포함되어 있을시 공백단위로 파일명이 구분되어 정상적으로 파일의 내용을 검색할 수 없다.
4. 기타
아직 정규식에 대해 많은 내용을 알고 있진 않지만 grep에 정규식을 활용하여 많은 정보를 획득 할 수 있다는 사실을 알게 되었다.
그리고 sed 에 대해서도 충분한 지식이 있으면 다양한 방면으로 활용이 가능 할 것 같다.
다음엔 정규식과 sed 에 관련한 내용을 공부한 다음 포스팅을 해야겠다.
검색해야 할 파일도 많고..
또 그 결과를 키워드 별로 구분도 해야 하고..
하나하나씩 find 명령어를 실행시켜 검색을 하기가 껄끄러워 쉘 스크립트를 만들어 보았다.
몇 줄 안되지만 ShellScript 보기만 했지 직접 만들어보니.. 여간 힘들었다.
1. Make Keyword List
- '내가 키워드 목록이다' 라고 구분할 수 있는 의미있는 확장자를 가지게 한다.
ex) MykeywordList.kwd
- 키워드 목록 내용은 별다른게 없다 아래와 같이 키워드를 '한줄 한줄' 구분해주면 된다.
apple
iphone
what
iphone
what
2. Config
스크립트가 너무 길어지는걸 방지하기 위해 필요한 변수들을 환경변수처럼 만들었다.
#경로지정
a_path="/a"
b_path="/b"
a_path="/a"
b_path="/b"
3. ShellScript
#!/bin/ksh
SCRIPT_PATH=`pwd`
#설정파일을 import 시킨다.
. $SCRIPT_PATH/config
echo $a_path
#kwd 파일 목록을 불러온다.
file_list=`ls *.kwd`
#순차적으로 kwd 파일의 내용을 읽어와 대상 경로의 파일들을 대상으로
#keyword와 매칭되는 파일들을 검색한다.
for current_file in $file_list
do
SCRIPT_PATH=`pwd`
#설정파일을 import 시킨다.
. $SCRIPT_PATH/config
echo $a_path
#kwd 파일 목록을 불러온다.
file_list=`ls *.kwd`
#순차적으로 kwd 파일의 내용을 읽어와 대상 경로의 파일들을 대상으로
#keyword와 매칭되는 파일들을 검색한다.
for current_file in $file_list
do
#현재 kwd 파일의 내용, 즉 keyword들을 list 변수에 담는다.
list=`cat $SCRIPT_PATH/$current_file`
#keyword별로 대상 경로의 파일들에 해당 내용이 포함되어있는지 검색한다.
# find [경로] -name [이름] | xargs grep [keyword]
for current in $list
do
#keyword별로 대상 경로의 파일들에 해당 내용이 포함되어있는지 검색한다.
# find [경로] -name [이름] | xargs grep [keyword]
for current in $list
do
# 해당 경로에 있는 xml 파일을 대상으로 [.keyword"]가 포함된 파일을 찾는다.
echo "find $a_path -name '*.xml' | xargs grep '.*[.]$current\"'"
maplist=`find $a_path -name '*.xml' | xargs grep .*[.]$current\"`
maplist=`find $a_path -name '*.xml' | xargs grep .*[.]$current\"`
#검색된 내용을 중 필요한 항목만을 추출하여 파일에 기록한다.
for current_map in $maplist
do
do
yn=`echo $current_map | grep xml`
if [ $yn ]
then
temp=${current_map#*$map_path}
mapname=${temp%%.xml*}
echo $mapname
echo ${mapname##*/} >> $current_file.map
fi
yn=`echo $current_map | grep .*[.]$current`
if [ $yn ]
then
temp=${current_map%\"*}
keyword=${temp##*\"}
echo "keyword" $keyword
echo $current $mapname $keyword >> $current_file.rslt
fi
if [ $yn ]
then
temp=${current_map#*$map_path}
mapname=${temp%%.xml*}
echo $mapname
echo ${mapname##*/} >> $current_file.map
fi
yn=`echo $current_map | grep .*[.]$current`
if [ $yn ]
then
temp=${current_map%\"*}
keyword=${temp##*\"}
echo "keyword" $keyword
echo $current $mapname $keyword >> $current_file.rslt
fi
done
done
done
done
검색내용 추출부분은 필요에 의해 작성한거라 크게 신경쓸 필욘 없다.
단, 변수의 내용을 조작(?) 하는 부분은 유용하게 쓰이는 부분이라 숙지하여야 할 필요가 있다.
예제 | 설명 |
---|---|
${variable:-default} | 변수가존재하지 않으면 default로 대체한다. |
${#variable} | variable의 length를 얻는다. |
${variable%word} | variable의 끝에서부터 word와 첫번째로 일치하는 부분을 제거한다. |
${variable | variable의 끝에서부터 word와 마지막으로 일치하는 부분을 제거한다. |
${variable#word} | variable의 시작에서부터 word와 첫번째로 일치하는 부분을 제거한다. |
${variable##word} | variable의 시작에서부터 word와 마지막으로 일치하는 부분을 제거한다. |
출처 : http://www.insford.com/wiki/Wiki.jsp?page=Shell%20Script
위 사이트에 ShellScript에 대한 기본적인 내용이 잘 정리되어 있어 참고하시길 바랍니다.
참고로 아래의 find 문은 파일명에 공백이 포함되어 있을시 파일내용을 검색 할 수 있다.
** 공백이 포함되어 있을시 공백단위로 파일명이 구분되어 정상적으로 파일의 내용을 검색할 수 없다.
find [path] -type f | sed -e s/^/\"/ -e s/$/\"/ | xargs egrep [Keyword]
4. 기타
아직 정규식에 대해 많은 내용을 알고 있진 않지만 grep에 정규식을 활용하여 많은 정보를 획득 할 수 있다는 사실을 알게 되었다.
그리고 sed 에 대해서도 충분한 지식이 있으면 다양한 방면으로 활용이 가능 할 것 같다.
다음엔 정규식과 sed 에 관련한 내용을 공부한 다음 포스팅을 해야겠다.
반응형
'ETC' 카테고리의 다른 글
su - 와 su의 차이 (0) | 2011.08.22 |
---|---|
WebLogic 설치 (0) | 2011.08.11 |
[HP-UX] java 버전 확인 (0) | 2011.08.11 |
ALBD network connection errors in log on the client machine (0) | 2011.07.22 |
MAN - DATE (0) | 2011.07.04 |