따라서 텍스트 파일을 구문 분석하고 1행과 14행을 인쇄한 다음 15-46행에서는 아무 작업도 수행하지 않고 47행과 60행을 인쇄하는 식으로 파일 끝까지 인쇄합니다. 따라서 기본적으로 46줄마다 1행과 14행을 인쇄하고 EOF까지 46행마다 반복합니다.
답변1
GNU sed 사용첫걸음 ~ 첫걸음주소 범위 확장:
sed -n '1~46p; 14~46p;' file
답변2
awk
태그에 해당 내용이 있으므로 해결 방법을 제공 하겠습니다 awk
.
awk '(NR%46==1||NR%46==14){print}' file
답변3
POSIX가 작동하지 않았습니다 sed
.
sed 'H;1h;$!d;x;y/\n#/#\n/;s/\(#[^#]*\)\{12\}#\([^#]*\)\([^#]*#\)\{33\}/#\2##/g;s/\(.*\)##.*/\1/;s/##/#/g;y/\n#/#\n/'
sed
다른 도구가 더 적합할 때 이러한 작업에 일반 POSIX를 사용하는 것은 의미가 없다고 생각하지만, 실제 작업에 필요할 수 있는 몇 가지 유용한 요소가 여기에 있으므로 설명을 추가하겠습니다.
H;1h;$!d;x
패턴 공간에서 전체 파일을 수집하는 패턴으로, 종종 유용합니다(GNU에서는sed
options 로 대체할 수 있습니다-z
). 어떻게 작동하는지 알아낼 수 있습니다.y/\n#/#\n/
개행 문자를 다른 문자(이 경우#
)로 바꿉니다. "개행 문자를 제외한 모든 문자"와 같은 표현이 필요한 경우 해결 방법으로 처리 전후에 이 작업을 수행하세요. 다시 말하지만 GNU 에서는 허용되기sed
때문에 GNU에서는 필요하지 않습니다 .[^\n]
- 명령의 이상한 패턴은 줄 내용인
s
12+1+33=46#
(이전 줄 바꿈) 및 45 와 일치합니다.[^#]*
모든 행은 변경되지 않고 유지되며, 12개 행이 삭제되고, 1개 행이 유지되고,\2
33개 행이 삭제됩니다. 이는 전 세계적으로 수행됩니다. 이##
작업은 후행 줄을 제거하기 위해 수행됩니다.