Я пытаюсь добавить два строк в начало всех файлов в каталоге.
Я могу сделать это для отдельного файла, используя следующую команду:
echo -e "% First Line\n% "$(date)"\n\n$(cat file1.txt)">file1.txt
Как мне добавить две строки в начало всех файлов в каталог?
Если ваша платформа поддерживает редактирование на месте с помощью sed
, попробуйте что-то вроде
sed -i "1i\\
First line\\
$(date)" *
К сожалению, эта часть sed
несколько громоздка; Я помню, как мне было трудно понять точный синтаксис из документации.
Во-первых, ваша команда:
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
perl -i -lpe '
$FNR++ or print "% First Line\n%", `date`, $\;
$FNR = 0 if eof;
' *.txt
Только для первой строки ввода для каждого файла выводим нужные строки. Мы вставляем ORS
$\
в print
, чтобы поместить дополнительную новую строку, как того требует OP, на основе инструкции echo
.