-2

Для постгенерации fake-module-bpy (для блендера Python)... но язык не имеет значения. Итак, я использую следующую консольную команду

]$ ls  | grep -v _init_ | sed -E 's/^([a-zA-Z0-1]+)/import \1/' >> __init__.py

Все файлы Python будут записаны в __init__.py в качестве импорта (исключая себя __init__.py)

Могу ли я написать / добавить не конец, а начало файла?

2 ответа2

1

Все, что делает grep , может быть сделано в sed: см. Этот урок. В этом случае вы добавляете -e '/PATTERN/d' для воспроизведения опции grep -v:

ls | sed -E -e '/_init_/d' -e 's/^([a-zA-Z0-1]+)/import \1/' >> __init__.py

Вы можете устранить ls , используя вместо этого:

for f in *; do echo "$f"; done | sed -E -e '/_init_/s' -e 's/^([a-zA-Z0-1]+)/import \1/' >> __init__.py

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

Есть несколько способов добавить файлы в обратном порядке:

  • Если вы используете ls , то ls -r выведет файлы в обратном порядке.
  • Если вы используете for f in *; ... , затем передайте вывод через sort -r .
  • Вы можете использовать tac чтобы впоследствии изменить порядок строк в выходных данных.
  • Долгосрочный способ - вывести каждый файл в однострочный файл, добавить к нему текущий список вывода, а затем переместить его, чтобы перезаписать текущий список вывода.
1

Это отвечает на ваш второй вопрос.

Вот небольшая хитрость, чтобы написать содержимое в начале файла с помощью sed:

sed -i '1s/^/to start of file\n/' existing_file.txt

Может быть, с небольшой модификацией это то, что вам нужно.

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