Есть ли способ найти похожие слова один под другим в 2 строки - PullRequest
0 голосов
/ 04 января 2019

У нас большой файл в unix / windows. Данные в нем как

update table tblName set col1='Test' where col1='Test1'
select * from a
select * from b
delete from tblName where col1='xyz'
select * from a
select * from b
select * from c
delete from tblName where col1='pqr'
select * from c

Я хочу найти все строки, в которых 2 или более операторов выбора появляются один под другим в VI или Notepad ++ и любом другом редакторе.

* 1006 Е.Г. *

Поиск должен найти

select * from a
select * from b

Или даже

select * from a
select * from b
select * from c

но не

select * from c (the last line)

Может кто-нибудь помочь, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 04 января 2019
  • Ctrl + F
  • Найти что: (^select \* from.*\R)(?1)+
  • UNcheck Match case
  • check Wrap вокруг
  • check Регулярное выражение
  • UNCHECK . matches newline
  • Найти следующее

Пояснение:

(                   # start group 1
    ^               # beginning of line
    select \* from  # literally
    .*              # 0 or more any character but newline
    \R              # any kind of linebreak (ie. \r, \n, \r\n)
)                   # end group 1
(?1)+               # repeat pattern defined in group 1, 1 or more times
0 голосов
/ 04 января 2019

Вы должны посмотреть на регулярные выражения для этого.Вы должны проверить, какой стандарт использует ваш текстовый редактор, вы найдете это в документации ( Notepad ++ , vim ). На vim вы также можете сделать: help pattern, чтобы найти документацию по этому вопросу.В большинстве текстовых редакторов это регулярное выражение должно работать:

(select \* from \w+\n){2,}

Соответствует двум или более последовательным строкам в форме

select * from (some variable made up of letters, numbers and underscores)

Это будет , а не match

select * from a where property = "foo"

В vim все немного по-другому, вам придется использовать шаблон

\(select \* from \w\+\n\)\{2,\}

, чтобы вы могли делать такие вещи, как замена этих строк

:%s/\(select \* from \w\+\n\)\{2,\}/hey, two or more select statements were removed here\r/g

(будьте осторожны, эти строки будут заменены во всем файле, поэтому проверьте, что вы потеряете).

Есть также дополнительные детали, которые вы можете рассмотреть, например, с учетом регистрапоиск без учета регистра и пустые строки.

...