sed,perl等中的多行正则表达式

时间:2015-02-13 20:17:27

标签: regex perl unix sed

我需要多线正则表达式(unix兼容)的帮助来替换以下内容 -

create table "my_table" (
  "id" integer,
  "field_1" integer,
);

使用 -

create table "my_table" (
  "id" integer,
  "field_1" integer
);

基本上,我正在寻找的是一个逗号,然后是一个紧密的括号,然后是一个分号。我想用仅用括号和分号替换它。

我已经挖掘了其他几个问题,但我相信挑战是围绕换行。

希望能够使用stdin和stdout运行。

2 个答案:

答案 0 :(得分:1)

gnu awk应该:

awk -v RS='^$' '{gsub(/,\n);/,"\n);")}1' file
create table "my_table" (
  "id" integer,
  "field_1" integer
);

它将,<new line>);替换为<new line>);

更新,谢谢Ed

答案 1 :(得分:0)

如果您希望.与换行符匹配,则需要/s。但你无论如何都不想要那样。 \s会匹配换行符(\n也会匹配。)

my $text = <<'__EOI__';
create table "my_table" (
  "id" integer,
  "field_1" integer,
);
__EOI__

$text =~ s/,(?=\s*\);)//g;

print($text);

以上删除逗号后跟可选空格);