首页 > 解决方案 > 我需要帮助使用 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 

但我不确定如何避免替换所有括号中的数据。任何帮助表示赞赏。

标签: bashshellsedscripting

解决方案


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

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;

推荐阅读