GNU sed를 사용하여 특정 줄과 다음 빈 줄을 삭제하는 방법은 무엇입니까?

GNU sed를 사용하여 특정 줄과 다음 빈 줄을 삭제하는 방법은 무엇입니까?

다음 텍스트가 있습니다.

Start-Date: 2013-11-11  07:43:49
Commandline: apt-get install --no-install-recommends catfish

Start-Date: 2013-11-11  11:27:07

Start-Date: 2013-10-16  22:53:02

Start-Date: 2013-10-16  22:55:16

Start-Date: 2013-10-17  22:41:09

Start-Date: 2013-10-17  22:42:02

Start-Date: 2013-10-17  22:42:33

Start-Date: 2013-10-17  22:46:01

Start-Date: 2013-10-17  23:00:06
Commandline: apt-get install shimmer-themes

Start-Date: 2013-10-17  23:01:52
Commandline: apt-get install --no-install-recommends gedit

"시작 날짜"로 시작하는 행과 다음 빈 행을 제거하고 싶습니다. 즉, 나는 단지 다음을 원합니다:

Start-Date: 2013-11-11  07:43:49
Commandline: apt-get install --no-install-recommends catfish

Start-Date: 2013-10-17  23:00:06
Commandline: apt-get install shimmer-themes

Start-Date: 2013-10-17  23:01:52
Commandline: apt-get install --no-install-recommends gedit

내 질문이 중복되지 않았으면 좋겠어특정 문자열을 포함하는 줄과 다음 줄을 삭제합니다.

답변1

sed '/^Start-Date:/ {N; /\n$/d}'

sed는 라인 그룹을 흡수/인식하고 원하는 작업을 수행하는 스트림 편집기입니다.

N"현재 버퍼에 줄바꿈과 다음 입력 라인을 추가합니다"이므로 \n버퍼에 있는 것은 추가된 라인의 시작입니다. /\n$/d이는 "버퍼에 마지막으로 추가된 라인이 비어 있으면 모두 삭제"를 의미합니다.

답변2

awk도움이 되는:

$ awk '{if ($1=="Commandline:") {printf "%s\n%s\n\n", l,$0}; l=$0}' test.txt 
Start-Date: 2013-11-11  07:43:49
Commandline: apt-get install --no-install-recommends catfish

Start-Date: 2013-10-17  23:00:06
Commandline: apt-get install shimmer-themes

Start-Date: 2013-10-17  23:01:52
Commandline: apt-get install --no-install-recommends gedit

답변3

펄에서는:

$ perl -ne 'print $last,"$_\n" if /^Commandline/; $last=$_' foo.txt 
Start-Date: 2013-11-11  07:43:49
Commandline: apt-get install --no-install-recommends catfish

Start-Date: 2013-10-17  23:00:06
Commandline: apt-get install shimmer-themes

Start-Date: 2013-10-17  23:01:52
Commandline: apt-get install --no-install-recommends gedit

또는 빈 줄을 제거합니다.

$ perl -ne 'print $last,$_ if /^Commandline/; $last=$_' foo 
Start-Date: 2013-11-11  07:43:49
Commandline: apt-get install --no-install-recommends catfish
Start-Date: 2013-10-17  23:00:06
Commandline: apt-get install shimmer-themes
Start-Date: 2013-10-17  23:01:52
Commandline: apt-get install --no-install-recommends gedit

-n스위치를 사용하면 perl입력 파일이 한 줄씩 처리되어 각 줄을 특수 변수에 저장됩니다 $_. 위 스크립트는 현재 줄( $_)과 현재 줄이 로 시작하는 경우 이전 줄( )을 인쇄합니다. 그런 다음 현재 줄을 다른 이름으로 저장하고 다음 줄로 이동합니다.$lastCommandline$last

관련 정보