특정 문자열 뒤에 여러 줄 문자열 추가

특정 문자열 뒤에 여러 줄 문자열 추가

특정 문자열을 찾은 후 파일에 여러 줄 문자열을 삽입하려고 합니다. 이미 많은 옵션을 검색하고 시도했지만 그 중 어느 것도 예상한 결과를 반환하지 않았습니다.

편집하려는 블록은 다음과 같습니다.

var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var log = require("cf-nodejs-logging-support");

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express(); //After this line I want to insert several lines

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

module.exports = app;

삽입하고 싶은 줄의 예는 다음과 같습니다.

function x (test){
    console.log("TEST");
}

따라서 최종 파일은 다음과 같아야 합니다.

var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var log = require("cf-nodejs-logging-support");

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

function x (test){
    console.log("TEST");
}

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

module.exports = app;

내가 시도한 잠재적인 솔루션 중 하나는 다음 코드 블록이지만 공백이 포함된 여러 줄을 삽입할 수 없었습니다.

@echo off
setlocal enabledelayedexpansion
ren in.txt in.tmp
set p=
for /f %%a in (in.tmp) do (
if "%%a"=="5" if "!p!"=="var app = express();" Echo 4 >> in.txt
Echo %%a >>in.txt
set p=%%a
)
del in.tmp

저는 추가 소프트웨어를 설치할 필요가 없는 솔루션을 매우 선호합니다. 하지만 다른 방법이 없다면 이것도 괜찮을 것이다. 현재 Windows 7 PC에서 작업하고 있지만 이 스크립트는 Windows 10에서도 작동합니다.

내 전체 스크립트(여기에 표시된 것보다 훨씬 더 큼)는 간단한 배치 파일로 작성되었습니다.

답변1

나는 다음을 생각해내기 전에 지나치게 복잡한 방법을 많이 겪었습니다.

@echo off

set "txt=C:\Your\Text\File.txt"
set "old=var app = express();"

setlocal enabledelayedexpansion
for /f "delims=" %%A in ('type "%txt%" ^| find /v /n "" ^& break ^> "%txt%" ') do (
    set "line=%%A"
    set "line=!line:*]=!"
    if not "!line!" == "!old!" >>"%txt%" echo(!line!
    if "!line!" == "!old!" (
        echo(!old!
        echo.
        echo(function x ^(test^)^{
        echo(   console.log^("TEST"^);
        echo(^}
    )>>"%txt%"
)

endlocal

실제로는 매우 간단합니다. 여기서 유일하게 멋진 부분은 'type "%txt%" ^| find /v /n "" ^& break ^> "%txt%" '새 파일을 생성할 필요가 없고 !line!파일에 다시 쓰기 전에 변수 시작 부분에서 줄 계산 항목을 제거해야 하기 때문입니다. (이것이 하는 일입니다 set "line=!line:*]=!").

그 외에도 이것은 모든 행을 살펴보고 그렇지 않은 경우 var app = express();해당 행을 있는 그대로 파일에 다시 에코합니다. 만약 라인~이다 var app = express();대신에 echo var app = express();뒤에 빈 줄( echo.)과 추가하려는 줄이 옵니다. 명심해야 할 또 다른 사항은 ('s, )'s 및 }'s를 피하는 것입니다.

스크립트의 다른 곳에 ' 가 있으면 문제가 있을 수 있으므로 ]질문이 있으면 알려주시기 바랍니다.

관련 정보