다음 텍스트가 있습니다.
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
입력 파일이 한 줄씩 처리되어 각 줄을 특수 변수에 저장됩니다 $_
. 위 스크립트는 현재 줄( $_
)과 현재 줄이 로 시작하는 경우 이전 줄( )을 인쇄합니다. 그런 다음 현재 줄을 다른 이름으로 저장하고 다음 줄로 이동합니다.$last
Commandline
$last