[완료] 특정 문자열을 포함한 라인부터 위에 4줄을 삭제하는 것을 찾고 있습니다.
글쓴이: nahanstar / 작성시간: 월, 2012/02/20 - 5:44오후
지금 쉘 스크립트를 작성하고 있는데요..
특정 문자열을 포함한 라인부터 위에 4줄을 삭제하는 것을 찾고 있습니다.
물론 sed를 이용하여 특정 문자열을 포함한 라인만 지우는 것은 알고 있습니다.
그런데 특정 문자열을 포함한 라인부터 ~ 다중라인을 지우는 것을 어떻게 해야할지 모르겠네요..
sed에 특정 옵션이 있는지? , 아니면 다른 방법을 이용하면 되는지??
알고 싶습니다. 답변 부탁드릴께요.
예제) 대략 이런 패턴에서.. SQL_NOCAHE를 포함한 위로 4개의 라인을 삭제하고 싶습니다.
# Time
# User@Host
# Query_time
SELECT /*!40001 A
# Time
# User@Host
# Query_time
SELECT /*!40001 SQL_NO_CACHE */
# Time
# User@Host
# Query_time
SELECT /*!40001 B
# Time
# User@Host
# Query_time
SELECT /*!40001 C
Forums:
더 좋은 방법이 있겠지만, 예전엔 grep으로 줄
더 좋은 방법이 있겠지만, 예전엔 grep으로 줄 번호를 구한 후 head, tail 을 조합해서 처리했던 적이 있습니다. 물론 느립니다...
더 좋은 방법이 있겠지만, sed를 쓰면
더 좋은 방법이 있겠지만,
sed를 쓰면 matched된 라인 이후를 지우는 것은 쉽습니다.
cat input.txt | sed '/PATTERN/,+2d' -> PATTERN이후 2줄 삭제 (총3줄)
이걸이용해서 matched된 라인 이전 4줄을 지우려면,
tac input.txt | sed '/PATTERN/,+3d' | cat
이렇게 하면 될것 같네요..
grep의 -v 옵션과, -A, -B, -C 옵션을 같이 써서 되면 좋은데,
이건 grep에서 지원을 안하는듯..
ex 에디터를 쓰는 게 제일 낫지
ex 에디터를 쓰는 게 제일 낫지 않을까요?
g/pattern/-4,-1d
대충 이런 식??
패턴도 지우시려면 g/pattern/-4,d
패턴도 지우시려면
g/pattern/-4,d
답변 감사합니다.
다시 적용해보고,,, 잘 되는지 말씀드릴께요....
정말 감사합니다. ^^
댓글 달기