2009-09-13 2 views
1

내가 파일에서 날짜 범위를 추출하고 그들에게이 두 번째 매개 변수

전 인쇄 명령 실행을하려고 모든 값을 검색하지 SED : 'SED -ne을/^ 2009-08-20/,/^ 2009 년 8 월 26 일/p '

2009 년 8 월 26 일에 여러 번 발생했지만 파일을 모두 반환해야하지만 첫 번째 파일 만 반환합니다. 모든 수익을 올릴 수 있습니까?

감사합니다.

답변

4

SED -ne '/^2009-08-20 /,/^ 2009-08-26/BE/^ 2009-08-26/일; D; EP'

을 설명하는 ' e '는 레이블이고 범위에 있다면 해당 레이블로 분기합니다. 두 번째 기회를주고 범위의 끝인지 확인합니다. 그렇지 않은 경우 줄을 삭제하십시오.

+0

굉장 !!!!! 정말 고맙습니다! –

+1

이봐, 나는 그 해결책을 좋아한다. autoprint를 사용하여 명시 적 레이블과 인쇄를 생략하면 더 짧아 질 수 있습니다 :'sed -e '/^2009-08-20 /,/^ 2009-08-26/b;/^ 2009-08-26/b; d'' – mihi

+0

네 말이 맞다! 이것은 더 좋아 보인다. – Vereb

2

끝 날짜의 첫 번째 일치 만 반환하는 이유는 범위가 첫 번째 패턴의 첫 번째 일치에서 두 번째 패턴의 첫 번째 일치까지 범위를 가지며 범위가 첫 번째 패턴까지 인쇄를 중지하기 때문입니다 다시 발생합니다. 두 번째 패턴을 세 번 쓰기 문제가없는 경우 (전용)은 시작 날짜 사이 (포함) 인 경우 선을 인쇄합니다

sed -ne '/^2009-08-20/,/^2009-08-26/{/^2009-08-26/!p};/^2009-08-26/p' 

및 종료 날짜를 사용할 수 있습니다 - 그 무엇이다! 또는 종료일로 시작하는 경우).

관련 문제