awk 中的相对行偏移量(/pattern/+1 或 /pattern/-1)

awk 中的相对行偏移量(/pattern/+1 或 /pattern/-1)

当我想打印两个图案之间的线条(不包括具有这些图案的线条)时,我可以在ex使用图案后进行+1打印。-1太棒了。这可能吗awk?现在,我通过设置一个is_printing标志来拼凑它。

这是ex为了从 SQL 表创建中获取列定义:

$ 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这样的事也能做吗? (与s相比,我更喜欢awks 语法。)sed

答案1

抱歉,但 awk 不能这样做,因为每一行都是单独通过脚本传递的。

理论上可以实现+x,之后转动一条线匹配X更多输入行为 true,但我认为我不想调试此类脚本;-)

顺便说一句:虽然所有内容都可以放在同一行上,但我至少会为每个条件/操作对投票支持一个新行,因此脚本更容易阅读和理解。

相关内容