Добавить многострочную строку после определенной строки

Добавить многострочную строку после определенной строки

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

Вот блок, который я хочу отредактировать:

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, но этот скрипт должен работать и на 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's, var app = express();за которым следует пустая строка ( echo.), а затем строки, которые вы хотели добавить. Другое, что нужно иметь в виду, — это экранирование ('s, )'s и }'s.

]Если в скрипте где-то еще есть символы ', могут возникнуть проблемы , поэтому если у вас возникнут какие-либо вопросы, просто дайте мне знать.

Связанный контент