我需要使用SED替换第三组括号中的值的帮助

所以我仍然是使用Bash /脚本的菜鸟。我正在做一个项目,该项目将自动执行抓取帐户密钥并将其放置在SQL查询行的特定括号内的过程,该行将存储在单独的文本文件中。我已经确定了到目前为止所需的内容,但是不确定如何替换特定括号的值。

这是一个示例查询:

SELECT NOW(),COUNT (*) FROM accT_HIST WHERE accT_KEY IN (1010000) AND REC_actV_IND = 'Y' AND DT_KEY < 20191009;

因此,我只想替换“ accT_KEY IN”之后的括号值。我该怎么办?

我得到使用以下内容替换括号中的值的要点:

"sed "s/([^)]*)/()/g" filename 

但是我不确定如何避免替换所有括号中的数据。感谢您的协助。

sean19851214 回答:我需要使用SED替换第三组括号中的值的帮助

([^)]*)替换第三次出现的()

sed "s/([^)]*)/()/3"

例如:

$ sed "s/([^)]*)/()/3" <<< "(1) (2) (3) (4);"
(1) (2) () (4);

要替换上一次出现的情况:

$ sed "s/\(.*\)([^)]*)/\1()/" <<< "(1) (2) (3) (4) etc;"
(1) (2) (3) () etc;
,

尝试一下:

 sed 's/\(.*ACCT.*(\)\([0-9]\{2,\}\)\().*\)/\1your_value_to_replace\3/g'

您可以使用转义括号在查询中创建3个正则表达式分组词,以区分各组:

  • 第一组:。* ACCT。*(表示从开始到ACCT再到括号为止的所有内容。
  • 2nd:[0-9] {2,}表示介于0到9之间的数字至少2次
  • 第三组:)。*右括号后的其余部分

然后,您仅替换第二组(\ 2),并保留第一组(\ 1)和第三组(\ 3),这将为您提供以下语法:\ 1whatever \ 3

本文链接:https://www.f2er.com/3156106.html

大家都在问