Самый легкий путь состоит в том, чтобы взять сценарий запуска Apache в пакете Apache Ubuntu и замену /usr/sbin/apachectl
/server/apache/bin/apachectl
.
Если это - осуществление изучения, у Вас есть несколько опций (от самого гибкого до наименее гибкого):
/etc/init/my_apache.conf
. Учитывая состояние Новомодной документации, я рекомендую читать существующие примеры и страницы справочника параллельно./etc/init.d
это запускает, останавливает, перезапускает или перезагружает конфигурацию Apache в зависимости от того, является ли его первое (и единственный) аргумент start
, stop
, restart
, или reload
(с force-reload
как псевдоним для reload
). Чтобы иметь сценарий запускаются на начальной загрузке, работают update-rc.d
. См. также практическое руководство Начальной загрузки Ubuntu./etc/rc.local
.Для Вашего конкретного случая это должно быть более просто:
sed '1 { P ; x }' your-file
Объяснение: в строке 1, сделайте следующее
Затем строка (пустой теперь) печатается снова как часть цикла.
Если Вы хотите добавить новую строку вместо символа новой строки (что я понял первоначально), затем просто используют sed
команда a\
(добавьте):
sed '1 a\
appended line' your-file
или даже
sed '1 aappended line' your-file
Это добавляет"appended line
"после строки 1.
'1 aapended line'
пример.
– angus
24.01.2012, 12:36
Я предполагаю sed
подход был бы:
sed '2 i whatever_line_of_text_you_wanted_to_INSERT' filename.txt
Это получит текст во вторую строку файла и затем, фактическая вторая строка с в файле станет третьим.
Обратите внимание, что, использование добавляет режим, если бы это должно было быть, то это должно было использовать первую строку, так как добавление произойдет после того, как номер строки отметил.
sed '1 a whatever_line_of_text_you_wanted_to_INSERT' filename.txt
Это могло бы работать на Вас:
sed 1G file
Если Вы хотите вставить something
после новой строки:
sed '1{G;s/$/something/}' file
Или если Вы дескрипторы sed \n
:
sed '1s/$/\nsomething/' file
Конечно, a
еще легче:
sed '1a something' file
Используя sed
и (определенные для Bash) управляющие коды ANSI:
# note: \ --> \\
printf '%s\n' 1 2 3 4 5 | sed -e $'1 { s/\\(.*\\)/\\1\\\ninserted line/; }'
Я обычно использую ed
для этого:
(echo 1a; echo 'Line to insert'; echo .; echo w) | ed - filename
Подобный a sed
решение, но без помехи завершенных новых строк.
echo
особенно под bash
: ed - filename <<< $'1a\nLine to insert\n.\nw'
.
– manatwork
28.01.2012, 18:56
dash
, который во многих системах является /bin/sh
.
– Arcege
28.01.2012, 19:26
echo
”. Экономия всех echo
действительно bash
только функция, но сокращение echo
количество от 4 до 1 работы в dash
и ksh
также: echo '1a\nLine to insert\n.\nw' | ed - filename
.
– manatwork
28.01.2012, 19:37
printf %s\\n
, который помещает новую строку после каждого аргумента, который Вы даете ей, и не завинчивает на специальных символах, встроенных в строку, которую Вы хотите вставить. Кроме того, почему использование ed
когда ex
доступно?
– Wildcard
12.04.2016, 04:54
я использовал бы Python для этого
import fileinput
for linenum,line in enumerate(fileinput,FileInput("file",inplace=1)):
if linenum ==1:
print ""
print line.rstrip()
else:
print line.rstrip()`
Я точно так же, как использование явного счетчика:
awk '(c==1) {print "new line"} (c!=1) {print $0} {c++}' file
Решение Python
python -c "import sys; lines = sys.stdin.readlines(); lines.insert(1,'New Line\n'); print ''.join(lines).strip()" < input.txt
В простейшем методе используются printf
и ex
:
printf '%s\n' 1a 'my line to insert' . x | ex file
1a
означает «добавить после первой строки»; .
завершает добавление; x
означает сохранение и выход.
Ни в одном из приведенных выше ответов не упоминается, как сохранить изменения в исходном файле, что, как мне кажется, и просил OP.
Это определенно то, что мне нужно, когда я перехожу на страницу.
Предположим, что ваш файл называется output.txt
sed -i '1 a This is the second line' output.txt
Мой частный случай использования - автоматическое добавление объявления таблицы стилей xsl в файл junit xml.
sed -i '1 a <?xml-stylesheet type="text/xsl" href="junit-html.xsl"?>' junit.xml
awk 'NR==2 {print "new line"} 1'
– glenn jackman 23.01.2012, 19:31