当我想打印两个图案之间的线条(不包括具有这些图案的线条)时,我可以在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相比,我更喜欢awk
s 语法。)sed
答案1
抱歉,但 awk 不能这样做,因为每一行都是单独通过脚本传递的。
理论上可以实现+x,之后转动一条线匹配X更多输入行为 true,但我认为我不想调试此类脚本;-)
顺便说一句:虽然所有内容都可以放在同一行上,但我至少会为每个条件/操作对投票支持一个新行,因此脚本更容易阅读和理解。