Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   findstr при записи в тот же файл (http://forum.oszone.net/showthread.php?t=336362)

TolikD 23-08-2018 18:55 2828184

findstr при записи в тот же файл
 
Мне нужно удалить заданную строку в текстовом файле. Конкретно нужно удалить ай пи и перезаписать файл без данной строки.
Судя по ману команды findstr делается это так:
Код:

findstr /I /V "192.168.1.101" test.txt
Результат будет вывод файла без искомой строки.
Однако, при добавлении кода с записью в тот же самый файл, текст в файле затирается полностью.
Батник:
Код:

findstr /I /V "192.168.1.101" test.txt>test.txt
echo Press any key...
pause > nul

Результат: пустой файл test.txt. Что не так делаю?

PS А при чем тут единичка?
Старый текст темы
Как-то давным давно я уже сталкивался с этой проблемой на семёрке, убил в тот раз целый день и пришлось всё делать через зад. А щас то же самое на ДЕСЯТКЕ!!!
Кто-нибудь мне скажет что тут происходит???
Код:

findstr /I /V "192.168.1.101" test.txt>test.txt
echo Press any key...
pause > nul

С кодом всё понятно вроде. Здесь командой findstr хочу убрать строку с айпи из файла.
Теперь выполняем батник.
Код:

C:\debug\cmdtest>findstr /I /V "192.168.1.101" test.txt 1>test.txt

C:\debug\cmdtest>echo Press any key...
Press any key...

C:\debug\cmdtest>pause  1>nul

Главный вопрос: ОТКУДА ЭТА ЕДИНИЧКА???
В результате он мне затирает текст! Или я отстал от жизни или это фича???

YuS_2 23-08-2018 19:12 2828191

Цитата:

Цитата TolikD
С кодом всё понятно вроде. Здесь командой findstr хочу убрать строку с айпи из файла. »

Цитата:

Цитата TolikD
Главный вопрос: ОТКУДА ЭТА ЕДИНИЧКА???
В результате он мне затирает текст! Или я отстал от жизни или это фича??? »

Главный ответ:
единичка - это числовой эквивалент дескриптора вывода в консоль, который перенаправлен в nul.
Но с кодом, всё же, Вы недопонимаете...
Код:

>test_out.txt findstr /ivc:"192.168.1.101" test.txt
при необходимости, файл с выходными данными переименовать

TolikD 23-08-2018 19:38 2828195

Привет!
У меня было мнение, что причина в единичке, якобы команда определяет лишний символ в параметрах. Но похоже что проблема глубже...
Ну так и что? Тема сводится к обсуждению как убрать строку с айпи? Твой код тоже не работает. Точнее он работает при вводе команды без перенаправления в левый файл, как работает и у меня. А вот в тот же файл почему-то облом.
Пора тему переименовать в разборки с командой findstr...

Iska 23-08-2018 19:56 2828199

Цитата:

Цитата TolikD
С кодом всё понятно вроде. »

Совсем непонятно.

1. Когда Вы используйте в таком виде вывод в файл в той же команде, которой пытаетесь читать из него — происходит следующее:
Скрытый текст

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

2. Единичка в:
Цитата:

Цитата TolikD
Код:

C:\debug\cmdtest>findstr /I /V "192.168.1.101" test.txt 1>test.txt
»

— это, как уже написал выше коллега YuS_2, просто номер дескриптора стандартного потока вывода, stdout (Стандартные потоки — Википедия). Её показывает интерпретатор команд при включённом режиме отображения команд (попросту — когда Вы не использовали echo off). На опустошение файла перед его чтением она никоим образом не влияет и влиять не может.

Цитата:

Цитата YuS_2
который перенаправлен в nul. »

А вот это не понял. Где там nul?!


Цитата:

Цитата TolikD
Твой код тоже не работает. »

Работает.

Цитата:

Цитата TolikD
Точнее он работает при вводе команды без перенаправления в левый файл, как работает и у меня. А вот в тот же файл почему-то облом.
Пора тему переименовать в разборки с командой findstr... »

Объяснение — на скриншоте: в указанном Вами виде файл test.txt сначала обнуляется, и лишь затем идёт попытка чтения из него. findstr.exe тут совершенно не при чём, вместо неё может быть любой исполняемый файл.

TolikD 23-08-2018 20:12 2828204

Ну затирает он вначале и что? Из скриншота я не понял, и хде там решение проблемы?!

Код:

echo 123>test.txt
почему не затирается?

точно я отстал от жизни, пора вешаться...

YuS_2 23-08-2018 20:15 2828206

Цитата:

Цитата Iska
А вот это не понял. Где там nul?! »

здесь:
Цитата:

Цитата TolikD
C:\debug\cmdtest>pause 1>nul »

====================================================

Цитата:

Цитата TolikD
решение проблемы?! »

Какой проблемы? Проблем никаких нет, я ведь Вам написал:
Цитата:

Цитата YuS_2
при необходимости, файл с выходными данными переименовать »

в тот же test.txt с перезаписью...

TolikD 23-08-2018 20:18 2828208

Ну и переименуй... Или я один туплю?

Код:

c:\debug\cmdtest>type test.txt
abc
192.168.1.101

c:\debug\cmdtest>>test.txt findstr /ivc:"192.168.1.101" test.txt

c:\debug\cmdtest>type test.txt

c:\debug\cmdtest>


YuS_2 23-08-2018 20:19 2828209

Цитата:

Цитата TolikD
Ну затирает он вначале и что? »

В общем, в cmd нельзя в одном наборе команд и читать из файла и записывать в него...

Цитата:

Цитата TolikD
Ну и переименуй »

от переименуя и слышу... :)
В смысле, тебе надо, ты и переименовывай... где тебя манерам учили?

TolikD 23-08-2018 20:23 2828213

Цитата:

В смысле, тебе надо, ты и переименовывай...
Еще раз: изначально переименовал.
При чем тут манеры? в итоге я прав

Ну есть же решение, только без записи в левый файл. Как это сделать ума не приложу...

YuS_2 23-08-2018 20:34 2828215

Цитата:

Цитата TolikD
Ну есть же решение, только без записи в левый файл. »

чем не устраивает решение:
Код:

<test.txt>+ findstr /ivc:"192.168.1.101"&move+ test.txt
?
Религиозные принципы мешают? :)

TolikD 23-08-2018 20:54 2828217

Зачем? Я и так мог бы наплодить кучу го%нокода и не подымать тему. Дело принципа. И всё можно, вот решение:
Код:

for /f "usebackq" %%a in (`findstr /V "192.168.1.101" test.txt`) do (set content=%%a)
echo %content%>test.txt

Всё пашет, тему можно закрыть

YuS_2 23-08-2018 21:03 2828218

Цитата:

Цитата TolikD
Зачем? Я и так мог бы наплодить кучу го%нокода и не подымать тему. »

Если тебе нужна была помощь, то тебе её дали, но именно твой, как ты выразился, го%нокод, точно никому не нужен...
1. Добавь в свой файл несколько строк и увидишь, почему го%нокод (его можно исправить, кстати)
2. Добавь в свой файл тысяч сто строк и замеряй скорость обработки (даже в случае с исправленным вариантом)
3. Посыпать голову пеплом не требуется, но манеры свои, всё же, подправь... на будущее.

Iska 23-08-2018 21:08 2828219

Цитата:

Цитата TolikD
Ну затирает он вначале и что? »

И ничего. В том-то и дело, что НИ-ЧЕ-ГО. Файл становится пустой. И Ваша findstr.exe получает на вход этот самый совершенно пустой файл test.txt.

Цитата:

Цитата TolikD
Код:

echo 123>test.txt
почему не затирается? »

Файл как раз таки усекается до нулевого размера. А затем уже в него пишется «123».

Цитата:

Цитата TolikD
Из скриншота я не понял, и хде там решение проблемы?! »

На скриншоте не решение проблемы, а объяснение её появления — а) почему так, и б) почему именно так, а не иначе.

Решение же банально — разнести чтение из и вывод в один и тот же файл, не делать этого одновременно в пределах одной команды.

Цитата:

Цитата TolikD
Или я один туплю? »

К сожалению, да. Видно, что Вы не понимаете, как происходит усечение исходного файла test.txt. Ну, давайте попробуем ещё раз:
Цитата:

Цитата TolikD
Код:

findstr /I /V "192.168.1.101" test.txt>test.txt
»

Выделенное начинает выполняться в первую очередь. Что при этом происходит — файл test.txt открывается, и его размер усекается до нуля. В него ещё ничего не выведено, он просто подготовлен для записи. Затем начинает выполняться findstr.exe, читает переданный ей аргумент, открывает этот самый файл test.txt — а там уже пусто. Понимаете? Команде findstr.exe попросту уже нечего фильтровать, файл test.txt пустой, поскольку Вы указали перенаправить в него вывод из той же самой команды.

Цитата:

Цитата TolikD
в итоге я прав »

Нет.

Цитата:

Цитата TolikD
Ну есть же решение, только без записи в левый файл. Как это сделать ума не приложу... »

Призовите коллег megaloman и alpap, они делали подобное через группировку команд и фильтры с more.

Цитата:

Цитата YuS_2
здесь: »

Аааа! Я только предыдущую единичку увидел, в:
Цитата:

Цитата TolikD
Код:

C:\debug\cmdtest>findstr /I /V "192.168.1.101" test.txt 1>test.txt
»

а вторую — нет. Спасибо, ясно, разобрался, доглядел ;).


Цитата:

Цитата TolikD
И всё можно, вот решение:
Код:

for /f "usebackq" %%a in (`findstr /V "192.168.1.101" test.txt`) do (set content=%%a)
echo %content%>test.txt

Всё пашет, тему можно закрыть »

Вы издеваетесь? Данный код а) потеряет все пустые строки в файле test.txt, но это не так страшно, как б) сохранит из всего содержимого файла test.txt только его последнюю строку:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

echo --- До... --------------------------
type "test.txt"
echo ------------------------------------

rem Здесь начало Вашего кода
for /f "usebackq" %%a in (`findstr /V "192.168.1.101" test.txt`) do (set content=%%a)
echo %content%>test.txt

rem Здесь окончание Вашего кода

echo --- ...и после ---------------------
type "test.txt"
echo ------------------------------------

endlocal
exit /b 0


YuS_2 23-08-2018 21:23 2828222

Цитата:

Цитата Iska
Призовите коллег megaloman и alpap, они делали подобное через группировку команд и фильтры с more. »

Зачем?
тут главное непонятно: зачем именно такое действие, что за религия запрещает применение промежуточного файла?
... в любом случае, представленный выше вариант, это наиболее быстрый вариант.
Можно, конечно, через цикл for такое осуществить (как попытался сделать ТС, пусть и коряво...), т.к. команды, результат которых разбирается в цикле, выполняются в новом процессе, но это очень медленно и неэффективно в итоге, плюс ещё со своими особенностями (такими как съедание пустых строк и т.п.)

Iska 23-08-2018 21:29 2828225

Цитата:

Цитата YuS_2
Зачем? »

Ну, как — зачем?! Из прынципа! :) Вы же сами об этом чуть выше пишете.

YuS_2 23-08-2018 21:36 2828228

Цитата:

Цитата Iska
Вы же сами об этом чуть выше пишете. »

не-не-не, про прынципы, не мое перо начеркало :)

Iska 23-08-2018 21:56 2828233

Цитата:

Цитата YuS_2
не-не-не, про прынципы, не мое перо начеркало »

«У меня все ходы записаны»™ ;):
Цитата:

Цитата YuS_2
Религиозные принципы мешают? »


YuS_2 23-08-2018 22:05 2828234

Цитата:

Цитата Iska
У меня все ходы записаны »

А, ну так то вопрос же был, не утверждение... :)

TolikD 23-08-2018 23:56 2828243

Всё! Товарищ один помог, все недостатки for исправляются параметрами, но всё равно корявенько получилось эт да! Батники в винде, когда дело касается обработки текста - это конечно же ещё та мозголомка башка кипит.
Код:

setlocal enableDelayedExpansion
set NL=^


set content=
for /f "usebackq delims=: tokens=1* eol=" %%a in (`findstr /V /N "192.168.1.101" test.txt`) do set content=!content!%%b!NL!
echo !content!


Iska 24-08-2018 00:26 2828248

Цитата:

Цитата TolikD
все недостатки for исправляются параметрами, »

Не все.

Цитата:

Цитата TolikD
но всё равно корявенько получилось эт да! »

Вы даже не представляете — насколько:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set NL=^


set content=
for /f "usebackq delims=: tokens=1* eol=" %%a in (`findstr /V /N "192.168.1.101" test.txt`) do set content=!content!%%b!NL!
>"Result.txt" echo !content!

endlocal
exit /b 0


— добро пожаловать в смешанный мир Windows+Unix! CrLf и Lf в одном флаконе!

Как поведёт себя приложение, которое должно будет работать с получившимся кадавром — вопрос.

YuS_2 24-08-2018 06:26 2828258

Цитата:

Цитата TolikD
Всё! Товарищ один помог, все недостатки for исправляются параметрами »

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

Во-первых:
Цитата:

The maximum individual environment variable size is 8192bytes
расшифровать, что это означает?
Вот тебе рабочий вариант:
Код:

for /f "delims=" %%a in ('findstr /ivc:"192.168.1.101" test.txt^&del test.txt') do >>test.txt echo %%a
с пустыми строками разбирайся сам...

Во-вторых:
выше уже подсказали возможные траблы.

В-третьих:
Как я уже говорил, скорость обработки, также никуда не денется...
Тот вариант с промежуточным файлом, который предложен выше, обрабатывает файл в ~100000 строк (~1,2Mb) за:
Код:

Start: 24.08.2018  9:20:41,81
Stop: 24.08.2018  9:20:42,17

причем все символы и пустые строки сохраняются...

В общем, всё остальное (на cmd, естественно), при такой постановке задачи - от лукавого... даже если возникнет иллюзия нормальной работы. ;-)

megaloman 24-08-2018 14:54 2828323

Не по теме: без findstr cmd+js без некошерного создания второго файла, пустые строки сохраняются, всякие непристойные символы сохраняются и не мешают. По сравнению с голым cmd длинный код
Удаляем строку, содержащую указанную подстроку
Не грубите писателю, он пишет как умеет
Код:

@set @E=1; /*
@Echo Off
cls
              Set "FileIn=Z:\Box_In\Улицы разбитых фонарей 22.txt"
        Set "DelFind=192.168.1.101"
       
        Cscript //NoLogo /E:jscript "%~dpnx0" "%FileIn%" "%DelFind%" 
pause
GoTo :Eof

*/
var oArg = WScript.Arguments;
var nArg = oArg.Count();

if (nArg < 2) {
        WScript.Echo("Error! Invalid number of arguments!");
        WScript.Quit(240);
}
var FText=oArg(0);

var FSO=WScript.CreateObject("Scripting.FileSystemObject");

var InFile;
try {InFile = FSO.OpenTextFile(FText,1);}
catch (e) {
  if (e !=0 ) {
        WScript.Echo("Error! " + FText + "  " + e.description);
              WScript.Quit(1);
    }
}
var TextAll = InFile.ReadAll();
InFile.Close();

var i0 = TextAll.indexOf(oArg(1));
if (i0 < 0) {
        WScript.Echo("Error! String not found! \n" + oArg(1));
        WScript.Quit(2);
}

var C10=String.fromCharCode(10);
var i1 = TextAll.lastIndexOf(C10,i0);
var i2 = TextAll.indexOf(C10,i0);

if (i1 < 0 && i2 < 0) {
        TextAll="";
}
else
{
        if (i2 < 0) {TextAll=TextAll.substring(0,i1+1)};
        if (i1 <= 0) {TextAll = TextAll.substring(i2+1,TextAll.length)};
        if (i1 >0 && i2 >= 0) {TextAll=TextAll.substring(0,i1+1) + TextAll.substring(i2+1,TextAll.length)};
}

InFile = FSO.OpenTextFile(FText,2);
InFile.Write(TextAll);
InFile.Close();


Iska 24-08-2018 15:30 2828327

megaloman, если пользовать JScript, то удобнее регуляркой.

megaloman 24-08-2018 16:33 2828332

Цитата:

Цитата Iska
если пользовать JScript, то удобнее регуляркой »

в этой задаче - какая в них радость?

YuS_2 24-08-2018 16:56 2828339

Цитата:

Цитата megaloman
Не грубите писателю, он пишет как умеет »

:) :up

Цитата:

Цитата megaloman
без некошерного создания второго файла »

Цитата:

Цитата megaloman
длинный код »

тогда кошерный и короткий powershell:
Код:

(gc test.txt -raw) -replace '(?<=^|\n)[^\n]*192\.168\.1\.101[^\n]*\n'|sc test.txt -non
:drug:

Цитата:

Цитата megaloman
какая в них радость? »

код будет значительно короче...

Iska 24-08-2018 19:46 2828350

Цитата:

Цитата megaloman
в этой задаче - какая в них радость? »

В использовании одного .test() и одного .replace(). Это ведь вроде как должно быть проще, не?


Цитата:

Цитата YuS_2
тогда кошерный и короткий powershell: »

Я таки ратую за присутствие в коде аналога .test() — ::IsMatch(), дабы не переписывать файл при отсутствии замен.

megaloman 24-08-2018 19:55 2828352

Iska, Я делал задачу для случая, когда искомая подстрока входит в строку, которую надо удалить. Строка в любом месте текста, может быть первая, может быть последняя. Реплейс, конечно, заманчиво, но не сообразил, как нарисовать регулярку, напряжно ...
Как альтернатива, читать текст построчно

Iska 24-08-2018 20:30 2828356

Я Вам нарисую, но только для VBScript, без файла и без каких-либо проверок, а Вы сами тогда на JScript переведёте, лады? Мой JScript оставляет желать лучшего.
Код:

Option Explicit

Dim strContent


strContent = _
        "192.168.1.98" & vbCrLf & _
        "192.168.1.99" & vbCrLf & _
        "192.168.1.100" & vbCrLf & _
        "192.168.1.101" & vbCrLf & _
        "#####192.168.1.101" & vbCrLf & _
        "192.168.1.101#####" & vbCrLf & _
        "#####192.168.1.101#####" & vbCrLf & _
        "192.168.1.102" & vbCrLf & _
        "192.168.1.103" & vbCrLf & _
        "192.168.1.104" & vbCrLf

WScript.Echo _
        "--- Before: -----------------------------" & vbCrLf & _
        strContent & vbCrLf & _
        "-----------------------------------------" & vbCrLf

With WScript.CreateObject("VBScript.RegExp")
        .Pattern = "^.*192\.168\.1\.101.*$\n"
        .Global = True
        .MultiLine = True
       
        If .Test(strContent) Then
                strContent = .Replace(strContent, "")
               
                WScript.Echo _
                        "--- After: ------------------------------" & vbCrLf & _
                        strContent & vbCrLf & _
                        "-----------------------------------------" & vbCrLf
        Else
                WScript.Echo "Not found pattern [" & .Pattern & "]."
        End If
End With

WScript.Quit 0

Скрытый текст


P.S. Не сработает только для одного случая — когда «192.168.1.101» будет в последней строке, и эта строка не будет завершаться символами конца строки.

YuS_2 24-08-2018 22:35 2828372

Цитата:

Цитата Iska
Я таки ратую за присутствие в коде »

понимаю, принимаю и всегда только за... это ведь несложно организовать, ежели возникнет такая необходимость, например так:
Код:

$re = '(?<=\A|\n)[^\n]*192\.168\.1\.101[^\n]*(\n|\Z)'
if(($a = gc test.txt -raw) -match $re){$a -replace $re|sc test.txt -non}

Цитата:

Цитата Iska
Не сработает только для одного случая — когда «192.168.1.101» будет в последней строке »

Кстати, да, у меня тоже не было учтено...
Но PCRE-совместимые регулярки - вещь в себе, т.е. достаточно универсальны, в основном...
Этот момент легко решается с помощью \Z

Цитата:

Цитата megaloman
Реплейс, конечно, заманчиво, но не сообразил, как нарисовать регулярку, напряжно ...
Как альтернатива, читать текст построчно »

Можете взять за основу шаблон из версии для PoSh...
Читать и парсить текст построчно, при достаточно большом объеме - тоскливое занятие (по скорости), хоть и более привлекательное, с точки зрения настраиваемости обработки.

megaloman 24-08-2018 22:40 2828373

Iska, прочесть файл в строку, добавить конец строки в конец, обработать, что получилось - записать без последнего символа. Всё отработает, но задачка получается очень частная: в моём тупом подходе - я даю скрипту подстроку произвольного вида. Если делать регулярку - получаем частное решение. Но красивое.
Наверное, если передавать js (=vbs) скрипту не подстроку для поиска, а рег. выражение, то прокатит.

Iska 24-08-2018 22:50 2828375

Цитата:

Цитата YuS_2
это ведь несложно организовать, ежели возникнет такая необходимость, например так: »

Ну, вот — можете же ;).

Цитата:

Цитата YuS_2
Но PCRE-совместимые регулярки - вещь в себе, т.е. достаточно универсальны, в основном...
Этот момент легко решается с помощью \Z »

Таки да. Добавляем в конец шаблона после символа «\n» символ «?»:
Код:

Option Explicit

Dim strContent


strContent = _
        "192.168.1.101" & vbCrLf & _
        "192.168.1.98" & vbCrLf & _
        "192.168.1.99" & vbCrLf & _
        "192.168.1.100" & vbCrLf & _
        "192.168.1.101" & vbCrLf & _
        "#####192.168.1.101" & vbCrLf & _
        "192.168.1.101#####" & vbCrLf & _
        "#####192.168.1.101#####" & vbCrLf & _
        "192.168.1.102" & vbCrLf & _
        "192.168.1.103" & vbCrLf & _
        "192.168.1.104" & vbCrLf & _
        "192.168.1.101"

WScript.Echo _
        "--- Before: -----------------------------" & vbCrLf & _
        strContent & vbCrLf & _
        "-----------------------------------------" & vbCrLf

With WScript.CreateObject("VBScript.RegExp")
        .Pattern = "^.*192\.168\.1\.101.*$\n?"
        .Global = True
        .MultiLine = True
       
        If .Test(strContent) Then
                strContent = .Replace(strContent, "")
               
                WScript.Echo _
                        "--- After: ------------------------------" & vbCrLf & _
                        strContent & vbCrLf & _
                        "-----------------------------------------" & vbCrLf
        Else
                WScript.Echo "Not found pattern [" & .Pattern & "]."
        End If
End With

WScript.Quit 0

и:
Скрытый текст

Цитата:

Цитата YuS_2
Можете взять за основу шаблон из версии для PoSh... »

Напрямую не выйдет, слишком разные возможности в регулярках.

Цитата:

Цитата megaloman
я даю скрипту подстроку произвольного вида. »

Да, к сожалению, в WSH нет такого хорошего средства, как метод Regex.Escape(String) Method (System.Text.RegularExpressions) | Microsoft Docs в .Net.

YuS_2 24-08-2018 23:32 2828383

Цитата:

Цитата Iska
Ну, вот — можете же »

Да тут дело не в умении/не умении, это достаточно простая операция, а потому не очень интересная... :)

Цитата:

Цитата Iska
Добавляем в конец шаблона после символа «\n» символ «?»: »

Все же, в этом случае, лучше так:
Код:

[^\n]*192\.168\.1\.101[^\n]*\n?
потому как, в случае чтения текста единым массивом, .* со своей жадностью (особенно в случае (?s) ) может привести к неожиданным результатам, при \n? в конце шаблона.

Цитата:

Цитата Iska
Напрямую не выйдет, слишком разные возможности в регулярках. »

Это да, вольные и урезанные реализации - зло, но тут и не надо напрямую, просто взять за основу...

Iska 24-08-2018 23:58 2828386

Цитата:

Цитата YuS_2
потому как, в случае чтения текста единым массивом, .* со своей жадностью (особенно в случае (?s) ) может привести к неожиданным результатам, при \n? в конце шаблона. »

Неа. Там ведь перед \n есть $. То есть, это — «конец строки, за которым сразу может следовать символ конца строки, а может и не следовать», вот такая интересная логика :). Разумеется, это справедливо и работает только для установки:
Код:

        .MultiLine = True
когда ^ и $ рассматриваются как «начало строки» и «конец строки», а не «начало текста» и «конец текста».

YuS_2 25-08-2018 00:11 2828387

Цитата:

Цитата Iska
Там ведь перед \n есть $ »

А, ну тоже верно... только это более частный случай, т.е. необходимо учитывать это обязательно.
А это:
Код:

[^\n]*192\.168\.1\.101[^\n]*\n?
будет работать, при любом .MultiLine

TolikD 27-08-2018 21:43 2828852

Цитата:

Не по теме: без findstr cmd+js без некошерного создания второго файла, пустые строки сохраняются, всякие непристойные символы сохраняются и не мешают. По сравнению с голым cmd длинный код
Удаляем строку, содержащую указанную подстроку
Не грубите писателю, он пишет как умеет
Ооо, а вот это именно то, что было нуно, готовое решение прямо таки!


Время: 12:53.

Время: 12:53.
© OSzone.net 2001-