Мне нужна помощь с использованием SED для замены значений в третьем наборе скобок - PullRequest
0 голосов
/ 06 ноября 2019

Так что я все еще новичок с 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 

, но я не уверен, как избежать замены данных в круглых скобках. Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Попробуйте это:

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

Вы можете создать 3 слова группировки регулярных выражений в своем запросе, используя экранированные скобки для различения групп:

  • 1-я группа:. * ACCT. *(означает все от начала до ACCT, затем все до открывающей скобки.
  • 2nd: [0-9] {2,} означает числа от 0 до 9 не менее 2 раз
  • 3-я группа:). * остальное после закрывающей скобки

Затем вы подставляете только вторую группу (\ 2) и оставляете первую (\ 1) и третью (\ 3), которые дают следующий синтаксис: \ 1wh независимо\ 3

0 голосов
/ 06 ноября 2019

Для замены третьего вхождения ([^)]*) на ():

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...