【发布时间】:2019-05-17 15:37:53
【问题描述】:
我有一个非结构化文件,我想搜索和替换字符串模式。
- 必须替换存在于 SELECT 和 FROM 字符串之间的字符串;这种模式之外的人应该保持原样。
文件格式是这样的
col4 is required to be upper so
make col4 upper
abc 12345 !$% DATA SELECT
col1 as col1,
col2 as col2.
col3,
sch.col4 as col4,
sch.tab.col4 as col4_1,
col4,
col5 FROM sch.tab
xyz 34354 ^&* DATA SELECT
col5 as col5,
col3,
col4,
col4 as col4,
col4 FROM
blah blah blah
我要更换:
-
col4,与upper(col4) as col4, -
sch.col4与upper(sch.col4) -
sch.tab.col4与upper(sch.tab.col4) -
col4(如果 col4 在选择查询的末尾)和upper(col4) as col4
该文件位于 linux 服务器上,我尝试使用 sed 和 awk 缩小包含 col4 的行,但无法从那里继续前进。
我能够使用下面的方法识别一种模式
awk '/SELECT/,/FROM/' test_file.txt | awk '/col4/{print $0, NR}' | awk -F AS '{print $1}'
查找 SELECT 和 FROM 之间的文本
识别具有 col4 的行
打印第一个字段
sed -n -e '/SELECT/,/FROM/p' -e 's/\(\([a-zA-Z]\{1,\}\.\)\{0,\}\)col4/upper(\0)/g' test_file.txt
并使用 sed
实际:
col4 is required to be upper so
make col4 upper
abc 12345 !$% DATA SELECT
col1 as col1,
col2 as col2.
col3,
sch.col4 as col4,
sch.tab.col4 as col4_1,
col4,
col5 FROM sch.tab
xyz 34354 ^&* DATA SELECT
col5 as col5,
col3,
col4,
col4 as col4,
col4 FROM
blah blah blah
预期结果:
col4 is required to be upper so
make col4 upper
abc 12345 !$% DATA SELECT
col1 as col1,
col2 as col2.
col3,
upper(sch.col4) as col4,
upper(sch.tab.col4) as col4_1,
upper(col4) as col4,
col5 FROM sch.tab
xyz 34354 ^& DATA SELECT
col5 as col5,
col3,
upper(col4) as col4,
upper(col4) as col4,
upper(col4) as col4 FROM
blah blah blah
非常感谢任何帮助!
【问题讨论】:
-
Python 也适合你?
-
@Juan C 嗨,是的,Python 3 也可以。
-
@oguzismail 抱歉。这是我的第一篇文章,现在编辑。