sed正则表达式用于捕获组的多次出现

Ant*_*lls 2 regex awk sed

我有一个包含多行的SQL文件,如下所示:

INSERT INTO mytable VALUES (1,2,3,'foo'),(2,4,5,'bar'),(3,5,9,'baz'),...;
INSERT INTO mytable VALUES (10,2,3,'foo'),(11,4,5,'bar'),(12,5,9,'baz'),...;
Run Code Online (Sandbox Code Playgroud)

我想在每一行的每个元组中添加第五列,像这样

INSERT INTO mytable VALUES (1,2,3,'foo','txt_foo'),(2,4,5,'bar','txt_bar'),(3,5,9,'baz','txt_baz'),...;
INSERT INTO mytable VALUES (10,2,3,'baz','txt_baz'),(11,4,5,'bar', 'txt_bar'),(12,5,9,'foo','txt_foo'),...;
Run Code Online (Sandbox Code Playgroud)

可以完成工作的sed或awk命令是什么?我尝试了多种正则表达式组合,但似乎没有选择任何出现的内容,也没有选择整个行。

我尝试过,例如:

sed -E "s/\((d+),(d+),(d+),'(.*)'\)/(\1,\2,\3,'\4','txt_\4')/g" /myfile.sql
Run Code Online (Sandbox Code Playgroud)

它什么也没做。

anu*_*ava 5

您可以使用sed

sed -E "s/'([^']+)'\)/'\1', 'txt_\1')/g" file
Run Code Online (Sandbox Code Playgroud)

INSERT INTO mytable VALUES (1,2,3,'foo', 'txt_foo'),(2,4,5,'bar', 'txt_bar'),(3,5,9,'baz', 'txt_baz'),...;
INSERT INTO mytable VALUES (10,2,3,'foo', 'txt_foo'),(11,4,5,'bar', 'txt_bar'),(12,5,9,'baz', 'txt_baz'),...;
Run Code Online (Sandbox Code Playgroud)

  • 智能观察和解决方案。+1 (2认同)
  • 奇迹般有效!太感谢了! (2认同)