Экранирование двойных кавычек в выражении findstr приводит к неверному выводу - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь найти строку (или строки, в данном случае есть только один возможный результат), содержащую это выражение tableName_tOracleOutput_1 = " в файле .java.Я использую команду findstr "tableName_tOracleOutput_. ^= /"" dt_dea_kaspersky.java непосредственно в cmd.exe, но результат не соответствует ожиданиям, как вы можете видеть:

C:\Users\miguilem\Desktop\test_folder>findstr "tableName_tOracleOutput_. ^= /""  dt_dea_kaspersky.java
                        String tableName_tOracleOutput_1 = null;
                                tableName_tOracleOutput_1 = "dt_dea_kaspersky";
                                tableName_tOracleOutput_1 = dbschema_tOracleOutput_1 + "."
                                        + tableName_tOracleOutput_1
                                                                "mo_dwh/dt_dea_kaspersky_0_1/contexts/"

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

C:\Users\miguilem\Desktop\test_folder>findstr "tableName_tOracleOutput_. ^= "  dt_dea_kaspersky.java
                        String tableName_tOracleOutput_1 = null;
                                tableName_tOracleOutput_1 = "dt_dea_kaspersky";
                                tableName_tOracleOutput_1 = dbschema_tOracleOutput_1 + "."
                                        + tableName_tOracleOutput_1

(обратите внимание на несогласованность двух выходных данных, по-видимому, экранированные двойные кавычки не полностью игнорируютсяони, по-видимому, вызывают случайную дополнительную строку-привидение ПРЯМО СЕЙЧАС, эта строка (mo_dwh / dt_dea_kaspersky_0_1 / contexts /) даже не присутствует ни в коде, ни в имени файла во всей файловой системе). Я проверил символы новой строки в notepad ++ ивыглядит как положено (стандарт CR | LF).Помимо совершенно бесполезной официальной документации (которая буквально просит пользователя прочитать о ней где-то еще в несвязанном руководстве по командной строке), я проверил информацию здесь:

  1. Избегание двойных кавычек в пакетеСкрипт
  2. http://www.robvanderwoude.com/findstr.php
  3. https://ss64.com/nt/findstr.html
  4. http://www.robvanderwoude.com/escapechars.php

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

1 Ответ

0 голосов
/ 03 декабря 2018

"tableName_tOracleOutput_. ^= /"" без дополнительных параметров интерпретируется как поиск строки с регулярным выражением с учетом регистра для tableName_tOracleOutput_ с еще одним символом, совпадающим с . ИЛИ = в начале строки ИЛИ косая черта, за которой следует двойная кавычка.Пробел в строке поиска в двойных кавычках интерпретируется как ИЛИ .

Командная строка, используемая для вашей задачи поиска:

findstr /R /C:"tableName_tOracleOutput_. = "" dt_dea_kaspersky.java

Параметр /C: обычно используется для литеральной строки поиска.Но в этом случае строка внутри двойных кавычек, тем не менее, интерпретируется как строка регулярного выражения из-за дополнительного использования опции /R с существенным отличием по сравнению с "tableName_tOracleOutput_. = "": пробелы не интерпретируются как ИЛИ выражения, но в виде буквенных символов.

" в конце строки поиска можно экранировать с помощью \, но в этом нет особой необходимости.

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