使用sed匹配逗号换行符endbracket

时间:2014-04-07 15:35:43

标签: regex sed

我想编写一个删除最后一个逗号的sed语句。

DROP TABLE IF EXISTS person;$
CREATE TABLE person ($
  id int(11) NOT NULL,$
  name varchar(500) DEFAULT NULL,$
  gender char(1) DEFAULT NULL,$
  birthdate date DEFAULT NULL,$
  deathdate date DEFAULT NULL,$
  height int(11) DEFAULT NULL,$
) ;$

代码段来自vim with:set list

想要的输出是

DROP TABLE IF EXISTS person;$
CREATE TABLE person ($
  id int(11) NOT NULL,$
  name varchar(500) DEFAULT NULL,$
  gender char(1) DEFAULT NULL,$
  birthdate date DEFAULT NULL,$
  deathdate date DEFAULT NULL,$
  height int(11) DEFAULT NULL$
) ;$

我试着这样做

sed -e 's@,$)@$)@'

但不匹配

3 个答案:

答案 0 :(得分:4)

sed一次处理一行输入。您需要将下一行附加到当前行,执行替换并打印模式空间:

sed 'N;s/,\n)/\n)/;P;D' inputfile

对于您的样本输入,这将产生:

DROP TABLE IF EXISTS person;
CREATE TABLE person (
  id int(11) NOT NULL,
  name varchar(500) DEFAULT NULL,
  gender char(1) DEFAULT NULL,
  birthdate date DEFAULT NULL,
  deathdate date DEFAULT NULL,
  height int(11) DEFAULT NULL
) ;

答案 1 :(得分:0)

您可以使用argdo对vim中的文件执行操作。

此表达式与最后一个逗号匹配:(使用/

/,[\s\n]*)\s*;

另外:VIM, Run a command on multiple files

答案 2 :(得分:0)

这可能适合你:

awk -v RS="" '{gsub(/,\n\)/,"\n)")}7' file