awk의 상대 줄 오프셋(/pattern/+1 또는 /pattern/-1)

awk의 상대 줄 오프셋(/pattern/+1 또는 /pattern/-1)

두 패턴 사이의 선(이 패턴이 있는 선 제외)을 인쇄하고 싶을 때는 ex패턴을 사용한 후 인쇄할 수 있습니다 +1. -1기이. 가능합니까 awk? 이제 is_printing깃발을 세워서 하나로 묶습니다.

이는 exSQL 테이블 생성에서 열 정의를 가져오는 것입니다.

$ ex schema/media.sql <<< '/^CREATE TABLE/+1,/^)/-1p'
#        id
#                SMALLINT
#                UNSIGNED
#                NOT NULL
#                AUTO_INCREMENT
#                COMMENT 'The auto-generated ID.',
#        parent_id
#                SMALLINT
#                UNSIGNED
#                NULL
#                COMMENT 'The ID of the parent album, if any.',
#        title
#                VARCHAR(255)
#                COLLATE utf8_unicode_ci
#                NOT NULL
#                DEFAULT ''
#                COMMENT 'The album title.',
#        description
#                TEXT
#                COLLATE utf8_unicode_ci
#                NOT NULL
#                COMMENT 'The album''s description.',

awk동일한 작업을 수행하는 명령 은 다음과 같습니다 .

$ awk '/^\)/ { exit; } is_printing; /^CREATE TABLE/ { is_printing = 1; }' schema/media.sql

awk 버전은 읽기가 쉽지 않습니다. 제가 관용어를 놓치고 있는 걸까요? sed이런 일이 가능할까요? (저는 awks 구문보다 s 구문을 선호합니다.)sed

답변1

죄송합니다. 각 줄이 스크립트를 개별적으로 통과하기 때문에 awk에서는 그렇게 할 수 없습니다.

이론적으로는 가능합니다+x, 그런 다음 일치하도록 선을 돌립니다.엑스더 많은 입력이 사실로 작동하지만 그러한 스크립트를 디버깅하고 싶지는 않습니다 ;-)

참고: 모든 것이 같은 줄에 있을 수 있지만 적어도 각 조건/작업 쌍에 대해 새 줄에 투표하여 스크립트를 더 쉽게 읽고 이해할 수 있습니다.

관련 정보