【问题标题】:I need help using SED to replace values in the third set of parenthesis我需要帮助使用 SED 替换第三组括号中的值
【发布时间】:2020-03-02 08:27:48
【问题描述】:

所以我仍然是 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 

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

【问题讨论】:

标签: bash shell sed scripting


【解决方案1】:

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

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;

【讨论】:

    【解决方案2】:

    试试这个:

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

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

    • 第一组:.*ACCT.*( 表示从开头的所有内容,然后是 ACCT,然后是所有内容,直到左括号。
    • 2nd : [0-9]{2,} 表示 0 到 9 之间的数字至少 2 次​​li>
    • 第三组:).* 右括号后的其余部分

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-13
      • 2016-11-25
      • 2013-04-23
      • 2017-08-31
      • 2016-01-29
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      相关资源
      最近更新 更多