Подтвердить что ты не робот

Добавить текст в файл на определенной строке в Linux

Я хочу добавить определенную строку, скажем, avatar к файлам, начинающимся с MakeFile и avatar, следует добавить к 15-й строке в файле.

Вот как добавить текст в файлы:

echo 'avatar' >> MakeFile.websvc

и вот как добавить текст в файлы, начинающиеся с MakeFile, я думаю:

echo 'avatar' >> *MakeFile.

Но я не могу добавить эту строку в 15-ю строку файла.

4b9b3361

Ответ 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*