Найти строку и заменить каждое вхождение на другую строку - PullRequest
1 голос
/ 03 марта 2011

Я ищу простое пакетное решение для следующего:

В ряде файлов я хочу заменить строку другой. Можно сделать это с помощью Notepad ++. Тем не менее, каждая новая строка должна быть уникальной, читать из списка новых строк.

Итак, если в некоторых файлах присутствует 'abc', и у меня есть список с новыми строками, замените его следующим образом:

abc -> alex
abc -> ben
abc -> chris
abc -> dave
и т. д.

У меня может быть текстовый файл с новыми строками для чтения.

Надеюсь, у кого-то есть решение для меня!

Большое спасибо, Леннарт

Ответы [ 3 ]

2 голосов
/ 03 марта 2011

Будет ли работать Perl-скрипт?

my @words = qw(alex ben chris dave ...);

while (<>) {
    s/abc/shift @words/ge;
    print;
}

Если вы хотите, чтобы список слов зацикливался:

my @words = qw(...);
my $i = 0;

while (<>) {
    # I know I should have written this in a more readable way...
    s{abc}{$words[$i++] // $words[$i=0]}ge;
    print;
}
1 голос
/ 04 марта 2011

Или как пакетный скрипт

@echo off
setlocal Disabledelayedexpansion
set "wordlist=alex ben chris dave"
for /F "tokens=* delims=" %%a in (myFile.txt) do (
    set "line=%%a"
    setlocal Enabledelayedexpansion
    for /F "tokens=1,*" %%b in ("!wordlist!") do (
        set "newline=!line:abc=%%b!"
        (echo(!newline!)
        if !newline! NEQ !line! (
            endlocal
            set "wordlist=%%c"
        ) ELSE ( 
            endlocal 
        )
    )   
)

Редактировать Изменить на "!"безопасный вариант

0 голосов
/ 04 марта 2011

Попробуйте найти исполняемый файл sed для Windows, который поддерживает переключатель -i (--inline), и ваша работа станет задачей малыша!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...