它不是那么多的正则表达式模式因为它是如何来实现它。我尝试过perl,sed和awk(各种各样的尝试),但我不确定这是多么可能作为一个单行(我宁愿不写一个perl脚本)。查找/替换两个标记字符串之间的字符串中的正则表达式
说我有
#MARKER_TOP
INSERT INTO ('col1', 'col2', 'col3')
VALUES
(123,123,'2018-20-20 24:24:24',123)
...etc.
(123,123,'2018-20-20 24:24:24',123);
#MARKER_BOTTOM
...and more! (not all INSERT tables will be marked, btw)
我想要做的是替换所有SQLS NOW()
那些字符串日期。具体而言,用Perl,我已经试过如下:
perl -w -pi.bak -e "undef $/; s/(#MARKER_TOP.*)'[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]'(.*#MARKER_BOTTOM)/$1 NOW() $2/msg" test.sql
但它剥去所有的利息(#MARKER_TOP
等)出块完全与NOW()
代替该办法过于重手为了我想要的。
你是什么意思“不是所有的INSERT表将被标记”? –
我的意思是这些SQL语句中的一些(即'INSERT INTO ...')将不具有标记('MARKER_TOP,MARKER_BOTTOM'),该文件长达数千行并带有多个INSERT语句。那些没有标记的人不应该改变日期。 – Matt