字符类中的特殊字符

时间:2019-05-20 14:08:28

标签: sql regex linux unix sed

我想匹配以下模式,并用周围的sql关键字替换它们。

文件位于Linux服务器上,其中包含SQL代码。我试图匹配一些正则表达式。理想情况下,我想匹配任意数量的特殊字符,字母,并忽略col_4的大小写,以在查询中查找包含col4的第一个字符串。

我尝试使用以下表达方式,也尝试在社区对另一个问题的答复下进行工作。

[A-Za-z_#]*\.\)\{0,\}col4

原始文本:

SELECT 
col1 as col1,
[&"tab.sch"].tabl_nm.col2 as col2,
col3,
[&"tab.sch"].tabl_nm.col_4 as col_4, 
\#tab.sch#.tab_nm.COL_4 col_4,
col5
FROM yada yada

我希望能够忽略col_4字段的第一个实例而忽略大小写

预期结果

SELECT 
col1 as col1,
[&"tab.sch"].tabl_nm.col2 as col2,
col3,
upper([&"tab.sch"].tabl_nm.col_4) as col_4,
upper(#tab.sch#.tab_nm.COL_4) col_4,
col5
FROM yada yada

2 个答案:

答案 0 :(得分:0)

要更改两个字符串时,请查看它们的共同点。当它们没有共同点(或复杂点)时,首先更改一个,然后更改另一个:

sed 's/a/b/; s/c/d/' inputfile

您能只看最后一部分就简单吗?

sed -r 's/^([^ ]*[.]col_4) /upper(\1)/i' source.txt

答案 1 :(得分:0)

感谢您的反馈。我可以使用下面的代码

解决此问题
sed '/SELECT/,/FROM/ {s/[Aa][Ss] [Cc][oO][lL]_4 *//;s/\([[:punct:]A-Za-z0-9]*\.\)\{0,\}[Cc][oO][lL]_4 /SUBSTR(&,1,30) as col4/;}' 
相关问题