我尝试使用sed解析sql文件。我需要根据以下示例提取位于一组行(field1到field 3)之间的内容。这是一个例子
Create table xyz
(
field1 varchar(255),
field2 varchar(255),
field3 int
);
Create table 123
(
fieldx varchar(255),
fieldy varchar(255),
fieldz int
);
如何仅使用sed提取属于xyz表的字段行?
谢谢
答案 0 :(得分:1)
这会打印从(
和)
开始的行之间的所有内容:
$ sed -n '/^(/,/^)/{ /^[()]/d; p;}' file
field1 varchar(255),
field2 varchar(255),
field3 int
-n
选项告诉sed不要打印任何内容,除非我们明确要求它。
/^(/,/^)/
是一个范围。它选择的行以一行开头(
并以一行开头)
结束。对于所有这些行,将执行大括号{...}
中的命令。
/^[()]/d
删除以(
和)
开头的行。
对于剩余的任何行,p
命令会导致它被打印。
$ sed -n '/^Create table xyz/,/^)/{ /^Create/d; /^[()]/d; p;}' file
field1 varchar(255),
field2 varchar(255),
field3 int