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

Я пытаюсь добавить два строк в начало всех файлов в каталоге.

Я могу сделать это для отдельного файла, используя следующую команду:

echo -e "% First Line\n% "$(date)"\n\n$(cat file1.txt)">file1.txt

Как мне добавить две строки в начало всех файлов в каталог?

0
03.05.2017, 07:29
3 ответа

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

sed -i "1i\\
First line\\
$(date)" *

К сожалению, эта часть sed несколько громоздка; Я помню, как мне было трудно понять точный синтаксис из документации.

0
28.01.2020, 04:46

Во-первых, ваша команда:

echo -e "% First Line\n% "$(date)"\n\n$(cat file1.txt)">file1.txt

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


Для одиночного файла рекомендуемый способ POSIX для вставки строк в начале файла:

printf '%s\n' 0a 'First line' '2nd line; 3rd line is empty' '' . x | ex file.txt

0a означает «добавлять после строки 0». Это команда для ex, редактора файлов POSIX (и, кстати, другой формы редактора vi). . в строке сам по себе завершает добавление. x сохраняет и выходит.

Чтобы сделать несколько файлов одновременно, используйте цикл for и файловый шаблон:

for f in *.txt; do
  printf '%s\n' '# This line heads all files' . x | ex "$f"
done
1
28.01.2020, 04:46
perl -i -lpe '
   $FNR++ or print "% First Line\n%", `date`, $\;
   $FNR = 0 if eof;
' *.txt

Только для первой строки ввода для каждого файла выводим нужные строки. Мы вставляем ORS $\ в print, чтобы поместить дополнительную новую строку, как того требует OP, на основе инструкции echo.

0
28.01.2020, 04:46

Теги

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