Добавить текст в файл на определенной строке в Linux
Я хочу добавить определенную строку, скажем, avatar
к файлам, начинающимся с MakeFile
и avatar
, следует добавить к 15-й строке в файле.
Вот как добавить текст в файлы:
echo 'avatar' >> MakeFile.websvc
и вот как добавить текст в файлы, начинающиеся с MakeFile, я думаю:
echo 'avatar' >> *MakeFile.
Но я не могу добавить эту строку в 15-ю строку файла.
Ответы
Ответ 1
Вы можете использовать sed
, чтобы решить эту проблему:
sed "15i avatar" Makefile.txt
или используйте параметр -i
для сохранения изменений, внесенных в файл.
sed -i "15i avatar" Makefile.txt
Чтобы изменить все начальные файлы, начинающиеся с Makefile
:
sed "15i avatar" Makefile*
Примечание. В приведенной выше 15
ваша линия интереса для размещения текста.
Ответ 2
Использование sed:
sed -i '15i\avatar\' Makefile*
где параметр -i указывает, что преобразование происходит на месте (что полезно, например, когда вы хотите обработать несколько файлов).
Кроме того, в вашем вопросе * MakeFile обозначает "все файлы, которые заканчиваются с MakeFile", тогда как "все файлы, которые начинаются с MakeFile" будут обозначаться как MakeFile *.
Ответ 3
Если вам нужно передать строку и параметры номера строки в script, попробуйте следующее:
perl -i -slpe 'print $s if $. == $n; $. = 0 if eof' -- -n=15 -s="avatar" Makefile*
-i
отредактируйте входной файл, не создавайте резервную копию
$.
- номер строки
Это основано на моем решении Вставить строку с определенным номером строки с помощью sed или awk, который содержит несколько других способов передачи параметров Perl, а также объяснения параметров командной строки.
Ответ 4
Если вам нужна более портативная версия, вы можете использовать ex
, который будет работать в любой системе * Nix. (Это заданное POSIX.) Команды Sed, данные до сих пор, зависят от GNU Sed.
Чтобы вставить строку, содержащую ничего, кроме "аватара" в 15-й строке каждого файла в текущем каталоге, имя которого начинается с "Makefile.", используйте:
for f in MakeFile.*; do printf '%s\n' 15i 'avatar' . x | ex "$f"; done
Ответ 5
perl -pi -e 'if($.==14){s/\n/\navatar\n/g}if(eof){$.=0}' MakeFile*