bash, как обойти некоторые ограничения с помощью 'ls'?

Эквивалентом вашего sed -i '1s/^/<start</' fileбудет:

sed -i '$s/$/>end>/' file

Это добавит текст >end>в последнюю строку (без новой строки )файла. Конечно, в этом случае (как и в вашем примере также )нужно, чтобы файл содержал хотя бы одну строку (непустую ).

Использование двойных кавычек (, как в выбранном ответе ), не является хорошей идеей, так как тогда оболочка будет пытаться обработать каждое $в строке. Команда преобразуется в:

sed -i "\$s/\$/>end>/" file

При использованииa(append, end )илиi(insert, start )также будет вставлена ​​новая строка, потребуются разные вызовы в BSD и GNU, и по-прежнему потребуется не -пустой файл.

Для GNU:

$ sed '1i<start<' file
$ sed '$a>end>' file

Для BSD:

$ sed '1i\
<start<' file
$ sed '$a\
>end>' file

Или, в оболочках, которые это позволяют (C -string):

$ sed $'1i\\\n<start<' file
$ sed $'$a\\\n>end>' file

Конечно, нет ничего проще:

echo '>end>' >> file

который работает и с пустыми файлами.

2
12.10.2021, 11:32
0 ответов

Теги

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