Специальные символы в классе персонажей - PullRequest
0 голосов
/ 20 мая 2019

Я хочу сопоставить приведенные ниже шаблоны и заменить их на ключевые слова sql вокруг них.

Файлы находятся на сервере Linux с кодом SQL в них. Я пытался сопоставить с некоторыми регулярными выражениями. В идеале я хотел бы сопоставить любое количество специальных символов, алфавитов и игнорировать регистр для col_4, чтобы найти первые строки, содержащие col4 в запросе.

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

[A-Za-z_#]*\.\)\{0,\}col4

Исходный текст:

SELECT 
col1 as col1,
[&"tab.sch"].tabl_nm.col2 as col2,
col3,
[&"tab.sch"].tabl_nm.col_4 as col_4, 
\#tab.sch#.tab_nm.COL_4 col_4,
col5
FROM yada yada

Я хочу иметь возможность обернуть верхнюю часть вокруг первого экземпляра полей col_4, игнорируя регистр

Ожидаемый результат

SELECT 
col1 as col1,
[&"tab.sch"].tabl_nm.col2 as col2,
col3,
upper([&"tab.sch"].tabl_nm.col_4) as col_4,
upper(#tab.sch#.tab_nm.COL_4) col_4,
col5
FROM yada yada

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Спасибо за отзыв. Я смог решить эту проблему с помощью приведенного ниже кода

sed '/SELECT/,/FROM/ {s/[Aa][Ss] [Cc][oO][lL]_4 *//;s/\([[:punct:]A-Za-z0-9]*\.\)\{0,\}[Cc][oO][lL]_4 /SUBSTR(&,1,30) as col4/;}' 
0 голосов
/ 20 мая 2019

Если вы хотите изменить две строки, посмотрите, что у них общего.Когда у них нет ничего общего (или сложного), сначала поменяйте одно, а потом другое:

sed 's/a/b/; s/c/d/' inputfile

Можете ли вы сделать это простым, просто взглянув на последнюю часть?

sed -r 's/^([^ ]*[.]col_4) /upper(\1)/i' source.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...