gpt4 book ai didi

python - 多行搜索和替换

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:58 25 4
gpt4 key购买 nike

我有一个非结构化文件,我想搜索和替换字符串模式。

  • 必须替换存在于 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, with upper(col4) as col4,
  • sch.col4upper(sch.col4)
  • sch.tab.col4upper(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

非常感谢任何帮助!!

最佳答案

使用 sed:

sed '/SELECT/,/FROM/ {s/as col4 *//;s/\([A-Za-z]*\.\)\{0,\}col4/upper(&) as col4/;}' file

解释:

  • s/as col4 *// : 现有 as col4被删除以防止在第二次替换后重复
  • \([A-Za-z]*\.\)\{0,\}col4 :搜索 0 个或多个字母和点的组合,后跟 col4
  • upper(&) as col4/; : 替换为新文本(使用 & 插入匹配字符串)

关于python - 多行搜索和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56189622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com