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

Какой самый простой / быстрый способ?

NB: я не хочу искать и заменять, но удалить все, а затем скопировать внутрь. Это было бы похоже на открытие файла, Ctrl + A >> Del >> Ctrl + V для каждого файла

2 ответа2

3

Unix-подобные

В Unix-подобной командной строке (в Linux, OSX и т.д.) Вы можете использовать cat для печати содержимого файла в STDOUT и > для перенаправления STDOUT в файл, перезаписывая его содержимое.

cat template.txt > file.txt

Самый простой способ - поместить template.txt в отдельный каталог, затем вы можете использовать цикл for для воздействия на каждый * .txt в рабочем каталоге:

for f in ./*.txt; do cat /path/to/template.txt > "$f"; done

В системах с bash 4+ (вероятно, это есть у любого современного * nix; проверьте с помощью bash --version), вы можете использовать расширенную глобализацию, так что вы можете иметь template.txt в том же каталоге, что и файлы, которые вы хотите перезаписать. записывать:

shopt -s extglob
for f in ./!(*template).txt; do cat template.txt > "$f"; done

Если у вас есть текстовые файлы во многих подкаталогах (ВНИМАНИЕ: ЭТО БУДЕТ ПЕРЕПИСАТЬ ВСЕ ФАЙЛЫ *.txt В РАБОЧЕМ СПРАВОЧНИКЕ И ВСЕ ЕГО ПОДРАЗДЕЛЕНИЯ, И ВСЕ ИХ ПОДРАЗДЕЛЕНИЯ ...), вы можете использовать globstar:

shopt -s globstar
for f in ./**/*.txt; do cat /path/to/template.txt > "$f"; done

##  OR:
shopt -s globstar extglob
for f in ./**/!(*template).txt; do cat template.txt > "$f"; done

Windows

Это работает аналогично, хотя синтаксис другой. Вместо cat используйте type:

type template.txt > file.txt

Для работы с каждым .txt в каталоге:

FOR %F IN (*.txt) DO type C:\path\to\template.txt > %F

Для рекурсивности используйте /R:

FOR /R %F IN (*.txt) DO type C:\path\to\template.txt > %F
0

Ну, то, что вы хотите, может быть сделано с помощью автоматического поиска и замены (например, что делает PowerGrep, но бесплатно), но проще просто взять шаблон и скопировать его как каждый новый файл. Это можно сделать из командной строки.

Создайте файл со списком всех имен файлов, в которые вы хотите поместить этот шаблон.

Итак, listoffiles.txt содержит содержимое:

file1.txt
file2.txt
file3.txt

Затем откройте командную строку и выполните:

C:\fdf> для /f% f в (listoffiles.txt) сделать @echo копировать template.txt% f

скопировать template.txt file1.txt
скопировать template.txt file2.txt
скопировать template.txt file3.txt

C:\ FDF>

Просто измените строку @echo copy template.txt, чтобы прочитать копию template.txt. т.е. удалить @echo или просто эхо.

Вам также нужен listoffiles.txt в c:\fdf и template.txt. И это создаст file1.txt file2.txt и т.д.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .