ETC

find와 sed 그리고 xargs

MuGrammer 2012. 11. 20. 14:19

find ./ \( -name '*.xrw' -o -name '*.js' \) | sed -e 's/^/\"/' -e 's/$/\"/' | xargs grep -n "modal*(" | sed -e 's/ //g' -e 's/ //g' -e 's/:/ /' -e 's/:/ /' | grep -v " //"

 - 위 명령어의 목적.

 - xrw와 js 확장자를 가진 파일 중에 modal()이란 명령어를 포함한 항목을 모두 검색한다.

 - 단, 주석처리 된 항목들은 검색대상에서 제외되어야 한다. 


이를 위해 이래저래 꼼수부린 명령어. 


1. find로 여러 확장자 찾기. 

 find ./ \( -name '*.xrw -o -name '*.js' \)

포인트는 괄호앞에 역슬래쉬(\)를 붙여야 한다는것. 그리고 역슬래쉬 다음엔 공백 다음에 -name 옵션을 붙여야 한다는것. 

그리고 -0 는 or와 같은 역할을 -a 는 and와 같은 역할을 한다는 것. 


2. sed 활용

검색결과에 대한 가공을 통해 파일 저장하고 편집하기 쉽도록 주로 replace 기능만 사용. 실제로는 더 많은 기능을 할 수 있다. 

필요한 것만 하면 되니까. ㅎㅎ

  1). sed -e 's/^/\"/' -e 's/$/\"/'

  2). sed -e 's/ //g' -e 's/ //g' -e 's/:/ /' -e 's/:/ /'

1) find로 실행된 검색결과 앞뒤로 큰따옴표를 입력한다. 이유는 파일명에 공백이 포함되어있을 경우 parameter 처럼 구분이 되어져버리기 때문이다. 

2) -e 옵션이 순차적으로 하나씩 적용된다. TAB을 제거 -> 공백제거 -> 첫번째 세미콜론을 TAB으로 변경 -> 두번째 세미콜론을 TAB으로 변경

    TAB으로 변경하는 이윤 뭐.. 엑셀편집 편하라고.. 


3. xargs와 grep

1) xargs grep -n "modal*("

2) grep -v " //"

1) xargs와 grep을 통해 검색된 파일 내부에 해당 키워드가 포함된 열의 내용과 행번호(-n옵션)를 표시해준다. 

2) sed에 가공된 항목들 중에 TAB+// 가 포함된 문장들은 제외를 시킨다. 



결과에 대한 만족도

어느 정도 기초데이터는 뽑은 것 같아 만족스럽긴 하지만 확실히 모르겠다. 

소스의 위치와 해당 키워드가 존재하는 행. 그리고 내용. ;;; 

다 들어있는데 왠지 깔끔하지 못하다는 기분이랄까.. 맘 같아선 중복항목들이 있는지까지 체크해보고 싶은데.. 

그럴려면 shellscript를 만들어야 하는데.. 그게 시간이 더 걸릴 것 같구.. 

다시 엑셀로 편집해야 한다는 점에선 그닥 만족스럽지 못하다. 


eclipse 이런 자료 뽑을 수 있는 plugin 같은 건 없나? 

키워드들 중에서 주석처리된 애들은 제외시켜주고 패턴에 맞게 검색결과 편집할 수 있게 해주고. ㅋ

에효~ 


수정버전


find ./ \( -name '*.xrw' -o -name '*.js' \) | sed -e 's/^/\"/' -e 's/$/\"/' | xargs grep 'modal'| sed -e 's/ //g' -e 's/ //g' |grep -v ':\/' | grep '[:\.]modal(\"' | sed -e 's/.\///' -e 's/\// /' -e 's/:/ /'


modal을 포함한 모든 문자열을 검색하고 모든 공백과 TAB을 지운 다음 처음 나타나는 콜론(:)바로 앞에 슬래쉬(/)가 있는 항목을 제외한다. 

그리고 modal이라는 글자 앞에 콜론이나 .이 있거나 modal 뒤에 (" 가 있는 항목만 보여준다. 공백, 탭을 모두 제거했으므로 함수라는 특성상 함수앞뒤엔 공백과 탭이 올 수 없으므로 그 사이에 슬래쉬나 기타 다른 문자가 끼어있으면 정상동작하지 않는 함수로 간주한다. 

반응형

'ETC' 카테고리의 다른 글

Window Sysinternals  (0) 2013.01.16
Internet Explorer9에서 "text/plain" Content Type 변경  (0) 2012.12.14
rcp  (0) 2012.10.29
OPTIMIZER  (0) 2012.10.15
TortoiseSVN Command  (1) 2012.10.09