2015-01-18 4 views
0

(GNU СЭД версии 4.0.7 - скомпилированные для Win32 - от http://unxutils.sourceforge.net)линейного продолжения в гну СЭД скриптов под интерпретатором CMD Win XP

предварять одну единственную линию на верхней части большой текстовый файл, то одну строку пакетный скрипт работает отлично:

gsed -i "1i longheader1 longheader2 longheader3 longheader4 ..." testfile.txt 

Однако, для ясности, было бы полезно для форматирования пакетного сценария с строковой разбиты на несколько строк, возможно, так:

gsed -i "1i^
longheader1^
longheader2^
longheader3^
longheader4"^
testfile.txt 

К сожалению, выполнение выше пакетный скрипт завершается с:

«longheader1» не распознается как внутренней или внешней командой, исполняемой программой или пакетным файлом.

Замена символ продолжения строки ^ по \ также терпит неудачу. ?

Любое предложение о том, почему «строка-продолжение» сценарий не удается, и потенциал кратким Обойти

__philippe

ответ

0
@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
COPY /y c:threadfile.txt u:\testfile.txt >NUL 
SET "sedinstruction=" 
FOR %%t IN (
1i 
longheader1 
longheader2 
longheader3 
longheader4 
... 
) DO SET "sedinstruction=!sedinstruction! %%t" 

sed -i "%sedinstruction%" u:\testfile.txt 
TYPE u:\testf* 

COPY /y c:threadfile.txt u:\testfile.txt >NUL 
SET "sedinstruction=" 
FOR %%t IN (
"1i" 
"longheader1" 
" longheader2" 
" longheader3 " 
"longheader4" 
"..." 
) DO SET "sedinstruction=!sedinstruction! %%~t" 

sed -i "%sedinstruction%" u:\testfile.txt 
TYPE u:\testf* 

GOTO :EOF 

Вот способ. - и вариация на тему

Обратите внимание, что в вашей первоначальной инструкции иногда бывает 1, а иногда и два пробела. Первый arbirarily вставляет один, второй + номер, включенный в кавычки. Могут быть варианты - цитаты не требуется, если «строка» не содержит пробела.

Обратите внимание, что это проявит некоторую чувствительность к некоторым символам - особенно % и ^.

+0

Благодаря Magoo для быстрого предоставления изысканных альтернативных решений. Заботьтесь о том, почему/когда моя попытка упрощенного сценария «продолжение строки» ломается, а оригинальный «однострочный» работает отлично? Cheers, __philippe – user19370

+0

Короче говоря, вы не можете сломать «процитированную строку», используя '^'. «cmd» имеет длинную и сложную историю. В основном новые объекты были добавлены в увеличивающихся количествах «снарядов», чтобы новая методология не нарушала гимнастику, используемую в поле, чтобы преодолеть прошлые недостатки. '^' опоздал в микс, поэтому, скорее всего, он будет обработан последним - после того, как строки будут решены. Я считаю, что это было предназначено только для того, чтобы вырвать чрезмерно длинные команды по линиям - и даже там люди нашли инновационные способы использования метода реализации. – Magoo