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

Bash 我需要使用SED替换第三组括号中的值的帮助,bash,shell,sed,scripting,Bash,Shell,Sed,Scripting,因此,我仍然是Bash/脚本的noob。我正在从事一个项目,该项目将自动化获取帐户密钥的过程,并将它们放在SQL查询行的一组特定括号中,该查询行将包含在一个单独的文本文件中。到目前为止,我已经知道我需要什么,但我不确定如何替换特定括号的值 下面是一个查询示例: SELECT NOW(),COUNT (*) FROM ACCT_HIST WHERE ACCT_KEY IN (1010000) AND REC_ACTV_IND = 'Y' AND DT_KEY < 20191009; 但我

因此,我仍然是Bash/脚本的noob。我正在从事一个项目,该项目将自动化获取帐户密钥的过程,并将它们放在SQL查询行的一组特定括号中,该查询行将包含在一个单独的文本文件中。到目前为止,我已经知道我需要什么,但我不确定如何替换特定括号的值

下面是一个查询示例:

SELECT NOW(),COUNT (*) FROM ACCT_HIST WHERE ACCT_KEY IN (1010000) AND REC_ACTV_IND = 'Y' AND DT_KEY < 20191009;


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

将第三次出现的[^]*替换为:

例如:

$ 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,再到开始括号内的所有内容。 第二:[0-9]{2,}表示0到9之间的数字至少2次 第三组:*结束括号后的剩余部分
然后,只替换第二组\2,保留第一组\1和第三组\3,这两组的语法如下:\1无论如何\3

您有多个带答案的问题,但您既没有反馈也没有接受一个。请注意:
$ sed "s/\(.*\)([^)]*)/\1()/" <<< "(1) (2) (3) (4) etc;"
(1) (2) (3) () etc;
 sed 's/\(.*ACCT.*(\)\([0-9]\{2,\}\)\().*\)/\1your_value_to_replace\3/g'