【发布时间】:2020-05-13 17:41:14
【问题描述】:
我有一个包含多行 SQL 语句的大文件,我需要将其“加入”到一个内衬中。考虑以下几点:
create unique index <bla1 bla1>
<more bla1 bla1>;
alter table <bla2 bla2>
<more bla2 bla2>;
create index <bla3 bla3>
<more bla3 bla3>;
alter table <bla4 bla4>
<more bla4 bla4>
<some more bla4 bla4>;
其中 pattern1 是“alter table”,而 pattern2 是“;”。我希望输出是:
create unique index <bla1 bla1>
<more bla1 bla1>;
alter table <bla2 bla2> <more bla2 bla2>;
create index <bla3 bla3>
<more bla3 bla3>;
alter table <bla4 bla4> <more bla4 bla4> <some more bla4 bla4>;
我看过其他关于用 sed 或 awk 合并行的帖子(最接近的是 sed join lines together 和 How to print lines between two patterns, inclusive or exclusive (in sed, AWK or Perl)? 有点给了我一些想法),但他们不能完全完成任务。 虽然我更喜欢 sed 或 awk 中的答案,但其他任何人都将不胜感激。 提前致谢!
【问题讨论】:
-
第一个链接方法如何失败?那些是前导制表符还是空格?
-
第一个链接方法如何失败? - 当最后一个字段为“0”时加入。我可以推断说最后一个字符是“;”但这也会加入“创建索引”,这是我不想要的。那些领先的制表符或空格? - 它们是空格。
-
我没有好版本的 sed 方便(长话短说),但试试这个:
sed ':a;/^alter table/{/;$/!{N;s/\n //;ba}}' -
@Beta - 效果很好!我需要处理一些难看的额外空间,但它可以按需要工作!添加您的建议作为答案,以便我可以选择它作为接受的答案。此外,我们将不胜感激......谢谢!!!
-
额外的空格。 [facepalm] 让我再试一次...