특정 문자열을 찾은 후 파일에 여러 줄 문자열을 삽입하려고 합니다. 이미 많은 옵션을 검색하고 시도했지만 그 중 어느 것도 예상한 결과를 반환하지 않았습니다.
편집하려는 블록은 다음과 같습니다.
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를 피하는 것입니다.
스크립트의 다른 곳에 ' 가 있으면 문제가 있을 수 있으므로 ]
질문이 있으면 알려주시기 바랍니다.