SED: вставить текст после последней строки?

Для меня, лично, это - то, что Bill сказал в ссылке @philfr:

В системе разработки или песочнице, имея / выбирают каталог, куда можно просто бросить вещи и видеть, работают ли они, имеет большой смысл. Я знаю, что не собираюсь проходить усилие упаковочных вещей сам для испытания их. Если приложение не удается, Вы можете просто комната,/opt/mytestapp каталог и то приложение являются историей. Упаковка может иметь смысл при выполнении большого развертывания (существуют времена, когда я действительно упаковываю приложения), но много времен, хорошо бросить материал в/, выбирают.

К сожалению, большинство make install сценарии продвигают файлы в /usr/local вместо того, чтобы просто делать символьную ссылку там :-/

79
03.11.2019, 15:25
9 ответов

sed -e "\$aTEXTTOEND" самый простой путь.

Как это работает

$ соответствует последней строке (это - нормальное sed адрес; 4aTEXTTOEND вставил бы после четвертой строки), a добавлять команда, и TEXTTOEND то, что добавить.

97
27.01.2020, 19:31
  • 1
    $ Escape как $$ в Make-файле. –  stevesliva 03.12.2014, 03:22
  • 2
    sed-i-e "\, $aTEXTTOEND" <имя файла> был бы полной командой. –  Lasse Meyer 29.07.2016, 22:52
  • 3
    эта команда не является поддержкой новый файл. (обнулите байт) –  zw963 11.11.2016, 17:07

Никакая потребность использовать sed в этом случае. Как насчет

echo "<?php" >> file
33
27.01.2020, 19:31
  • 1
    Достаточно верный, но можно предположить, что вариант использования OP заключает в скобки файл с"<php "и">", и заключающее в кавычки выбранное содержание все в одном идет, таким образом, он, вероятно, действительно хочет a sed фрагмент. –  dmckee --- ex-moderator kitten 06.09.2009, 18:12
  • 2
    Также, если Вы сделаете это и не хотите новой строки, используйте-n –  Vinko Vrsalovic 06.09.2009, 18:15
  • 3
    эха, который мне не нравится предполагать. Каждый раз, когда я пробую, я неправ. –   06.09.2009, 18:38
  • 4
    Другая причина, почему принятый ответ более полезен, в случае предварительного ожидания этого с sudo, который заставляет это изменение перестать работать с тех пор echo встроенная команда оболочки, а не исполняемый файл, найденный в $PATH –  Tony Cesaro 28.10.2014, 17:33
  • 5
    @TonyCesaro: echo встроенное, но также исполняемый файл, найденный в $PATH –  Zan Lynx 28.12.2016, 14:51

Принятие Вас хочет поместить конечный тег PHP в файлы, затем

sed -i '$s/$/\n?>/' file

должен добиться цели

24
27.01.2020, 19:31
  • 1
    Это работает приятно в случаях, где произвольное управление последней строкой входа желаемо.Спасибо! –  Jay Taylor 02.07.2015, 02:17

См. свое исходное сообщение для всех в одной команде sed.

find . -type f -exec sed -i -e "1s/^/<?php /" -e "\$s/\$/ ?>/" {} \;
5
27.01.2020, 19:31

Используйте sed, 'добавляют (a)' команду. Например, для добавления двух строк в конце файла:

sed -i -e '$a\
foo1 bar1\
foo2 bar2' file
4
27.01.2020, 19:31

Простым способом записывать и вносить изменения в содержимое на определенной строке в файле . Если вы хотите вставить что-нибудь под определенным номером строки, то можно воспользоваться командой ниже:

sed -i '2i i have started' sheikh.log

где 2i - номер строки 2 и i означает вставку . Если нужно вставить в последнюю строку, то используйте $ вместо 2 . Я начал - текст для вставки и sheikh.log - имя файла .

Мы также можем внести изменения в строку, используя нижеприведенную команду

sed -i '2c we have started' sheikh.log

i, которая изменяется на we .

2
27.01.2020, 19:31

Первый и последний

Я бы предположил, что любой, кто искал, как вставить/добавить текст в начало/конец файла, возможно, также должен знать, как сделать и другое.

cal |                            \
  gsed -E                        \
       -e     '1i\{'             \
       -e     '1i\  "lines": ['  \
       -e 's/(.*)/    "\1",/'    \
       -e '$s/,$//'              \
       -e     '$a\  ]'           \
       -e     '$a\}'

Пояснение

Это calвыходные данные, передаваемые в GNUsed(под названием gsedв macOS, установленной через brew.sh , и просто sedв установках GNU )с расширенным RegEx(-E)и применено 6 «скриптов» (-e), а разрывы строк экранированы с помощью \для удобства чтения.

  • Сценарии 1 и 2 используют 1i\для «вставки в строке 1».
  • Скрипты 5 и 6 используют $a\для «в строке <последняя> добавить». Я выровнял текстовые выходные данные по вертикали, чтобы код представлял ожидаемый результат.
  • Скрипты 3 и 4 выполняют замены (последние применяются только к "строке <последняя>" ).

В результате выходные данные команды преобразуются в действительный JSON.

Выход

{
  "lines": [
    "    October 2019      ",
    "Su Mo Tu We Th Fr Sa  ",
    "       1  2  3  4  5  ",
    " 6  7  8  9 10 11 12  ",
    "13 14 15 16 17 18 19  ",
    "20 21 22 23 24 25 26  ",
    "27 28 29 30 31        ",
    "                      "
  ]
}
0
27.01.2020, 19:31

Без возврата строки/каретки добавление текста helloв конец строки и редактирование файла на месте без вывода на терминал

sed -i '$s/$/hello/' file
0
27.01.2020, 19:31

Эквивалентом вашего 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
27.01.2020, 19:31

Теги

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