Добавить консоль в файл в начале

366
Yuchimenko Igor

Для постгенерации 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
Обязательная ссылка: [* Почему вы не должны анализировать вывод `ls (1)` *] (https://mywiki.wooledge.org/ParsingLs). :) Kamil Maciorowski 5 лет назад 0
Эти два вопроса настолько различны, они должны быть отправлены отдельно. За исключением второго уже [здесь] (https://superuser.com/q/246837/432690). Также обратите внимание на ответ «могу я…?» обычно "да" или "нет"; "как я могу…?" сделал бы лучший вопрос. Kamil Maciorowski 5 лет назад 2
-1. Обратная связь: несмотря на мое замечание, вы оставите два вопроса. Теперь есть два ответа, каждый отвечает на свой вопрос. Это не то, как сайт предназначен для работы. Kamil Maciorowski 5 лет назад 0
Теперь это дубликат [Как добавить текст в начало файла в Bash?] (Https://superuser.com/q/246837/432690) Плюс вы сделали один из ответов не по теме, но это было неизбежно, если только вы не оставили два разных вопроса, которые имели свои очевидные недостатки. Проблема в том, что в какой-то момент из этого беспорядка не было выхода без каких-либо жертв. :( Kamil Maciorowski 5 лет назад 0

2 ответа на вопрос

1
AFH

Все, что 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для обратного порядка строк в выходных данных впоследствии.
  • Долгосрочный способ - вывести каждый файл в однострочный файл, добавить к нему текущий список вывода, а затем переместить его, чтобы перезаписать текущий список вывода.
Примечание: ОП сузил вопрос и превратил ваш ответ не по теме. Kamil Maciorowski 5 лет назад 0
@KamilMaciorowski - В любом случае, половина ответа, но удаление `grep` является разумной частью ответа на вопрос в его нынешнем виде, хотя, возможно, это не должно быть первым, что нужно сказать. Я учел ваш комментарий о том, как избегать "ls". Я также рассматривал вопрос как проблему XY и пытался ответить на то, что мне показалось настоящим вопросом. AFH 5 лет назад 0
Правда ... Я просто хотел, чтобы вы знали, что все несколько усложнилось. Kamil Maciorowski 5 лет назад 0
1
Jan Kozo Vajda

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

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

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

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

Похожие вопросы