1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash exp="freeism-dn?dn=" folder="./result" for LINE in ls $folder do filename=basename $LINE linenumber=sed -n "/$exp/ =" $folder/$filename | tail -1 let "start = $linenumber - 6" let "end = $linenumber +3" sed -n "$start, $end p" $folder/$filename done |
sed에서 -n 옵션은 기본출력을 하지 않겠다는 의미(전체를 한번 출력함),
= 옵션은 해당 라인번호, p 옵션은 일치하는 것만 출력하겠다는 의미이다.
grep/sed/awk 다 비슷한 스크립트인데, 결국 파일내용을 1줄씩 input을 잡기때문에..
여러줄(멀티라인)에 걸친 내용을 찾고 싶을 때는 제대로 동작을 안한다.
그래서 내가 찾으려는 내용을 unique한 걸로 1줄 찾은 다음에 위아래로 몇 줄을 더 보여주도록
스크립트를 만들었다.
스크립트가 지저분하긴한데, 다른 방법을 잘 몰라서 그냥 만들었다-ㅅ-
그리고 sed 스크립트에서 조건부분을 ‘ ‘ (single quotation)으로 했더니 $str이 제대로 치환되지 않아
sed: -e expression #1, char 7: unterminated `s' command 와 같은 오류가 발생한다.
” ” (double quotation)으로 했더니 해결됐다.
방금 찾은 건데 어쨌든 1줄에 있는것을 찾아서 앞뒤로 몇줄 더 보는 거면 grep에 -A, -B 옵션이 있더라. 예전에 이 글을 본 기억이 나서 댓글 달고 간다.
글쿠만… 역시 넌 내가 아는 사람중에 제일 개발자스러워..^^ㅋㅋ 땡큐