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

Multiple Line Regular Expression in sed, perl, etc

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

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

有-

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

基本上,我要找的是一个逗号,后跟一个右括号,然后是一个分号。我只想用右括号和分号替换它。

我已经研究了其他几个问题,但我认为挑战在于换行符。

希望能够 运行 使用标准输入和标准输出。

如果你想.匹配一个换行符,你需要/s。但无论如何你都不想要那个。 \s 将匹配换行符(\n 也是如此)。

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

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

print($text);

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

这个gnu awk应该做的:

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

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

已更新,感谢埃德