Снять квадратные скобки, если содержимое в квадратных скобках не содержит пробелов - PullRequest
0 голосов
/ 18 марта 2020

У меня есть требование, где мне нужно конвертировать sql из 1 формата в другой формат.

Ниже приведен пример примера

select [Project_ID] AS [Project ID]

. Преобразуйте приведенную выше строку в:

select Project_ID AS "Project ID"

Таким образом, я думаю, что это двухэтапная стратегия

  1. Если я смогу как-то убрать [] для 1, у которых нет пробелов между ними. Может быть через Regex
  2. Заменить [и] на "для остальных 1сек.

У меня более 10K строк кода, которые необходимо изменить. Ручная работа потребует от меня много времени, чтобы сделать это.

Ответы [ 5 ]

1 голос
/ 18 марта 2020

Вы можете выполнить обе замены за один шаг:

  • Ctrl + H
  • Найти что: \[(\w+)\]|\[([^\]]+)\]
  • Заменить на: (?1$1:(?2"$2"))
  • CHECK Обернуть вокруг
  • CHECK Регулярное выражение
  • Заменить все

Объяснение:

  \[            # opening square bracket
  (\w+)         # group 1, 1 or more word character
  \]            # closing square bracket
|           # OR
  \[            # opening square bracket
  ([^\]]+)      # group 2, 1 or more any character that is not a closing bracket
  \]            # closing square bracket

Замена:

(?1             # if group 1 exists:
  $1              # replace with content of group 1
  :             # else
  (?2             # if group 2 exists:
    "$2"            # replace with content of group 2 suround with quotes
  )               # endif group 2
)               # endif group 1

Снимок экрана (до):

enter image description here

Снимок экрана (после):

enter image description here

1 голос
/ 18 марта 2020

Вы можете использовать два регулярных выражения для получения желаемого формата.

Выполните следующие действия:

  1. Сделайте резервную копию основного файла. Сделайте это в другом временном файле.
  2. Сделайте Ctrl + H и выберите «Регулярные выражения» в режиме поиска
  3. и напишите в поле «найти что»: (? I) (? <= Select) \ s + [|] \ s + (? = as) <ul>
  4. , затем нажмите replce all.
  5. напишите в поле «найти что»: [([^ []] +)]
    • вставьте «заменить коробку» и нажмите «заменить все»: «\ 1»
0 голосов
/ 18 марта 2020

Не самый эффективный способ. Но с OP все в порядке с awk

 awk -F'['  '{gsub(/\]/ , "", $2); gsub(/\]/ ,"" ,$3);  $3="\042"$3"\042"; print}'   ;

Демо:

$echo "select [Project_ID] AS [Project ID]" | awk -F'['  '{gsub(/\]/ , "", $2); gsub(/\]/ ,"" ,$3);  $3="\042"$3"\042"; print}'   ;
select  Project_ID AS  "Project ID"
$

Объяснение:

awk -F'[' -- Set delimiter as  "["

gsub(/\]/ , "", $2); -- Replace ]  with "" in second field. We pass regular expression between / / and \ - is escape character 

gsub(/\]/ ,"" ,$3) -- Remove ] from third field. 


 $3="\042"$3"\042"  -- Concat double quotes at start and end of 3rd field. 

0 голосов
/ 18 марта 2020

Если все строки кода имеют тот же формат, что и select [Project_ID] AS [Project ID], то вы можете сделать это в следующем порядке:

1: заменить ] as [ на AS " - (Space AS ")

2: заменить [ на - (Пробел)

3: заменить ] на "

РЕДАКТИРОВАТЬ:

Если данные представлены в смешанном формате:
select [Project_ID] AS [Project ID] и, возможно, select [Project_ID] [Project ID]

, то вы можете сделать это в следующем порядке:

1: заменить ] as [ на AS " - (пробел AS ")

2: заменить ] [ на " - (пробел")

3: заменить [ с - (пробел)

4: заменить ] на "

0 голосов
/ 18 марта 2020

Это простая задача для двух замен регулярных выражений.

Сначала замените \[([^\[\] \r\n]+)\] на $1. Это удаляет скобки из непробельных строк.

Далее замените \[([^\[\] \r\n]+ [^\[\]\r\n]+)\] на "$1". Это заменяет скобки на двойные кавычки в строках с пробелами.

Обратите внимание, что обе замены включают \[\] и \r\n. Это ограничивает замены строками, которые сами не содержат скобок, и строками, которые не содержат переносов.

Пожалуйста, сделайте резервную копию вашего файла перед выполнением такого рода редактирования. Поскольку вышеприведенное выполняет две отдельные замены, возможно, что строки с вложенными скобками будут обрабатываться неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...