Chinaunix

标题: 请教关于sed替换的问题 [打印本页]

作者: wzabcd1234    时间: 2016-08-25 16:38
标题: 请教关于sed替换的问题
文本如下:
INSERT INTO table_a VALUES ('a', 'b'), ('c', 'd');

替换后的结果:
INSERT INTO table_a VALUES ('a', 'b');INSERT INTO table_a VALUES ('c', 'd');

也就是把一行中的),(都替换为起始的INSERT XXX,sed命令用的不熟悉,请教有什么好方法,谢谢啊。
作者: 拖拉机商人    时间: 2016-08-25 16:59
sed 's#),(#)INSERT INTO table_a(#g'  yourfile
作者: moperyblue    时间: 2016-08-25 17:03
  1. echo "INSERT INTO table_a VALUES ('a', 'b'), ('c', 'd'), ('e', 'f');"|sed -r 's/\), \(/)<(/g;:a;s/(.*VALUES )([^<]*)</\1\2;\n\1/M;ta'
复制代码

INSERT INTO table_a VALUES ('a', 'b');
INSERT INTO table_a VALUES ('c', 'd');
INSERT INTO table_a VALUES ('e', 'f');
作者: wzabcd1234    时间: 2016-08-25 17:04
回复 2# 拖拉机商人

您好,是我没有说清楚。。。

文本是有很多行的,比如:
INSERT INTO table_a VALUES ('a', 'b'), ('c', 'd');
INSERT INTO table_b VALUES ('a1', 'b'), ('c1', 'd');
INSERT INTO table_c VALUES ('a2', 'b'), ('c2', 'd');

最终替换的结果是:
INSERT INTO table_a VALUES ('a', 'b'); INSERT INTO table_a VALUES ('c', 'd');
INSERT INTO table_b VALUES ('a1', 'b'); INSERT INTO table_b VALUES ('c1', 'd');
INSERT INTO table_c VALUES ('a2', 'b'); INSERT INTO table_c VALUES ('c2', 'd');

作者: 拖拉机商人    时间: 2016-08-25 17:46
本帖最后由 拖拉机商人 于 2016-08-25 17:47 编辑

理解错了,table有规则么?
作者: zxy877298415    时间: 2016-08-25 18:01
  1. awk -F \( 'gsub("),",");"$1,$0)' OFS="("  file
复制代码
回复 1# wzabcd1234



作者: 杰瑞26    时间: 2016-08-25 18:37
  1. root@localhost:~# str="INSERT INTO table_a VALUES ('a', 'b'), ('c', 'd');"
  2. root@localhost:~# echo $str | sed -e 's:),:);INSERT INTO table_a VALUES :'
  3. INSERT INTO table_a VALUES ('a', 'b');INSERT INTO table_a VALUES  ('c', 'd');
复制代码

作者: moperyblue    时间: 2016-08-25 19:34
  1. sed -r 's/\), \(/)<(/g;:a;s/([^(]*)([^<]*)</\1\2;\n\1/M;ta;s/\n//g'
复制代码

作者: blind_fish    时间: 2016-08-25 20:52
本帖最后由 blind_fish 于 2016-08-25 20:54 编辑

[root@CentOS6min ~]# cat c.txt
INSERT INTO table_a VALUES ('a', 'b'), ('c', 'd');
INSERT INTO table_b VALUES ('a1', 'b'), ('c1', 'd');
INSERT INTO table_c VALUES ('a2', 'b'), ('c2', 'd');
[root@CentOS6min ~]#sed -nr "s@^([^\(]+)(.*)\,(.*,.*)@\1\2;\1\3@p"  c.txt
INSERT INTO table_a VALUES ('a', 'b');INSERT INTO table_a VALUES  ('c', 'd');
INSERT INTO table_b VALUES ('a1', 'b');INSERT INTO table_b VALUES  ('c1', 'd');
INSERT INTO table_c VALUES ('a2', 'b');INSERT INTO table_c VALUES  ('c2', 'd');







欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2