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


77

Команда вставляет тег в начале файла:

sed -i "1s/^/<?php /" file

Как я могу вставить что-то в конец каждого файла с помощью SED?


3
{ cat file; echo 'END OF FILE'; } > newFile , это работает также благодаря ш. *. (не sed, но работает и просто)

4
простой echo "Cool Text" >> fileдолжен также сделать свое дело.
Данпе

Ответы:


95

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

Как это устроено

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


Escape $ as $$ в Makefile.
стевеслива

Для OS X sed -e '$a\NEWLINE\\'. Замените NEWLINE фактической новой строкой.
Хорхе Букаран

15
sed -i -e "\ $ aTEXTTOEND" <имя файла> будет полной командой.
Лассе Мейер

2
не работает на макос. Даже комментарий Хорхе Букарана: sed: 1: "$ a \ NEWLINE \\": дополнительные символы после \ в конце команды
Эмануэле Паолини

1
В Debian 9 он добавляет новую строку вместо добавления в конце последней строки.
Лучано Андресс Мартини

31

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

echo "<?php" >> file

2
Это правда, но вы можете догадаться, что сценарий использования OP заключает в скобки файл с « <php » и « >» и цитирует выделенное содержимое сразу, так что он, вероятно, действительно хочет sedфрагмент.
dmckee

2
Также, если вы сделаете это и не хотите новой строки, используйте echo -n
Vinko Vrsalovic

2
Я не люблю угадывать. Каждый раз, когда я пытаюсь, я ошибаюсь.

4
Еще одна причина, по которой принятый ответ более полезен, заключается в том, чтобы добавить его к этому sudo, что приводит к сбою этого варианта, поскольку echoв нем содержится встроенная команда оболочки, а не исполняемый файл$PATH
Тони Чезаро,

@TonyCesaro: echoвстроенный в систему, но это также исполняемый файл найден в$PATH
Зан Lynx

24

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

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

должен сделать трюк


1
Это хорошо работает в тех случаях, когда желательно произвольное манипулирование последней строкой ввода. Спасибо!
Джей Тейлор



3

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

sed -i -e '$a\
foo1 bar1\
foo2 bar2' file

2

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

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

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

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

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

iизменено на we.


-1

В общем и целом

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

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

объяснение

Это calвыводится по конвейеру в gnu- sed( вызывается gsedна macOS, установленном через brew.sh ) с расширенным RegEx ( -E) и применены 6 «скриптов» ( -e), а разрывы строк экранированы \для удобства чтения. Сценарии 1 и 2 используются 1i\для «в строке 1 вставить». Сценарии 5 и 6 используются $a\для «в строке <последний>, добавить». Я выровнял текстовые выходные данные по вертикали, чтобы код представлял то, что ожидается в результате. Сценарии 3 и 4 выполняют подстановки (последние применяются только к «line <last>»). Результатом является преобразование вывода команды в допустимый 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        ",
    "                      "
  ]
}

Хотя я не голосовал по вашему вопросу, учтите, что у нас уже есть несколько ответов, включая принятый, которые демонстрируют желаемый результат.
Джефф Шаллер

@JeffSchaller Сообщество Stack Exchange - это не форум. Его цель не ограничивается тем, чтобы помочь ОП разблокироваться. Цель состоит в том, чтобы заполнить глобальную базу знаний множеством вариантов, на которые искатели могут наткнуться при поиске ответов. Причина, по которой я назвал свой ответ, состоит в том, чтобы помочь пользователям распознать полезность этого ответа еще до того, как они нажмут на результат Google.
Бруно Броноски
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.