2015-05-07 3 views
0

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

test.txt

Version: 4.5.0 
Import: 
    //MPackages/Project/config/abc.txt      #head 
    //Packages/Project/config/cde.txt      #head 
View: 24234 
    //MPackages/Project/config/ac.txt      #head 

Удалите найденный текст между "Импорт:" и "Вид:" и заменить его с содержимым из образца текстового файла ..

sample.txt

1 
2 
3 

Желаемая выход

Version: 4.5.0 
Import: 
    1 
    2 
    3 
View: 24234 
    //MPackages/Project/config/ac.txt      #head 
+0

«Желаемый выход» не имеет правильного интервала, если только ваши требования не сложнее, чем вы заявили. – dbenham

+0

правильный интервал? просто вкладка? если вкладка усложняет пространство, тоже хорошо :) – Mihir

+0

В вашем выводе есть все строки из test.txt с отступом на дополнительные 3 пробела, кроме «Import:» имеет отступы 4 пробела. Строки sample.txt имеют отступы в 7 пробелов. Но, основываясь на вашем описании, я ожидал бы, что все линии сохранят свое первоначальное выравнивание. Так точно, что вы ищете? – dbenham

ответ

1

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

Вместо этого я использую JREPL.BAT - гибридный текстовый процессор JScript/пакетного текстового выражения, который запускается изначально на любой машине Windows с XP и далее.

Следующий один лайнер отлично работает как из командной строки, так и внутри пакетного скрипта. Он предполагает, что «Импорт:» и «Вид:» появляются только один раз.

jrepl "^" " " /f sample.txt | jrepl "^(Import:)[\s\S]*?(^View:)" "$1+'\r\n'+stdin.ReadAll()+$2" /j /m /f test.txt /o output.txt 
+0

Это сработало !!! спасибо за помощь. если возможно, объясните, пожалуйста, синтаксис, например "[\ s \ S] *?" – Mihir

Смежные вопросы