빈 줄을 찾은 다음 빈 줄 다음에 n번째 줄을 인쇄하는 짧은 스크립트를 작성하려고 합니다.
~을 위한
foo1
foo2
foo3
bar1
bar2
bar3
spam1
spam2
spam3
eggs1
eggs2
eggs3
빈 줄 다음에 매 두 번째 줄을 인쇄하면 다음과 같은 결과가 발생합니다.
foo2
bar2
spam2
eggs2
sed를 사용해 보았지만 sed -n -e "/^$/ {N; N; x; N; p; x; d}"
예약된 공간을 지울 수 없었고 결과는 내가 원하는 것과 달랐습니다.
답변1
awk '++n == 2; !NF {n = 0}' < your-file
또는:
sed -n '
n;p
:1
/./{
n;b1
}' < your-file
답변2
0번 줄은 빈 줄로 간주하기 때문에 조금 어렵습니다. 이를 무시하고 "빈 줄 다음에 한 줄씩 인쇄"라는 문자 그대로의 의미를 취하면 다음과 같이 할 수 있습니다 ex
.
ex -sc 'g/^$/+2p' -cq filename
-s
: 자동 모드(ex
실제로 대화형 편집).-c
: 실행할 명령을 선언합니다.g/^$/
:다음 명령을 실행하세요G전 세계적으로 모든 빈 줄+2p
:현재 줄에서 두 줄 아래 줄을 인쇄합니다.q
: 종료 명령
ex
행 0을 빈 행으로 계산하려면(행 1이 비어 있지 않은 경우에만) 행 1 앞에 빈 행을 삽입한 다음 행 1-2를 필터링하면 좀 더 정교해져야 합니다 uniq
. 하지만 지금은 awk
목적을 달성하기 위해 를 사용하는 것이 더 좋습니다.
답변3
쉽게 완료 perl
:
$ perl -n -e 'BEGIN {$count=0};
if (/^\s*$/) {$count=0} else {$count++};
if ($count eq 2) {print}' alexandru.txt
foo2
bar2
spam2
eggs2
답변4
빈 줄 이후 매 두 번째 줄을 인쇄하는 경우 인코딩 값은 2입니다.
시도 해봐:
awk 'BEGIN { empty=1; n=0; } { if ($0 ~ /^$/) { empty=1; n=0; } else if (empty) { n++; if (n==2) { empty=0; print; } } }' file.txt
file.txt는 현재 디렉터리에서 구문 분석할 파일의 이름입니다.
n번째 줄을 검색할 때 모든 빈 줄 뒤에는 항상 n개 이상의 줄이 뒤따른다고 가정해 보세요. 그렇죠?
테스트 출력은 다음과 같습니다.
awk 'BEGIN { empty=1; n=0; } { if ($0 ~ /^$/) { empty=1; n=0; } else if (empty) { n++; if (n==2) { empty=0; print; } } }' file.txt
foo2
bar2
spam2
eggs2
----
유명한 페이지가 있습니다:Sed - Bruce Barnett의 소개 및 튜토리얼
아래에서 이 버전을 사용해 보세요. 귀하의 버전과 매우 유사합니다.
sed -n '{
2 {
p
}
/^$/ {n
n
p}}' file.txt
foo2
bar2
spam2
eggs2