Unix-подобный

Unix-подобный

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

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

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

решение1

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

Окна

Это работает аналогично, хотя синтаксис отличается. Вместо 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

решение2

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

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

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

файл1.txt
файл2.txt
файл3.txt

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

C:\fdf>for /f %f in (listoffiles.txt) do @echo copy template.txt %f

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

С:\фдф>

Просто измените строку @echo copy template.txt на copy template.txt. Т.е. удалите @echo или просто echo.

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

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