Как я могу записать во вторую строку файла из командной строки?

Самый легкий путь состоит в том, чтобы взять сценарий запуска Apache в пакете Apache Ubuntu и замену /usr/sbin/apachectl /server/apache/bin/apachectl.

Если это - осуществление изучения, у Вас есть несколько опций (от самого гибкого до наименее гибкого):

  • Запустите Apache через Выскочку. Необходимо записать файл /etc/init/my_apache.conf. Учитывая состояние Новомодной документации, я рекомендую читать существующие примеры и страницы справочника параллельно.
  • Запустите Apache через сценарий SysV: исполняемый сценарий в /etc/init.d это запускает, останавливает, перезапускает или перезагружает конфигурацию Apache в зависимости от того, является ли его первое (и единственный) аргумент start, stop, restart, или reloadforce-reload как псевдоним для reload). Чтобы иметь сценарий запускаются на начальной загрузке, работают update-rc.d. См. также практическое руководство Начальной загрузки Ubuntu.
  • Запустите Apache с /etc/rc.local.

30
28.01.2012, 16:22
12 ответов
awk 'NR==1{print; print "new line"} NR!=1'
20
27.01.2020, 19:38
  • 1
    Немного короче: awk 'NR==2 {print "new line"} 1' –  glenn jackman 23.01.2012, 19:31
  • 2
    @glennjackman: Ваша версия не работает над моей системой, но ответ делает. А именно, с Вашим дублирована строка 2, и новая строка вставляется между обоими (поэтому как строка 3). –  Nikana Reklawyks 21.02.2014, 02:36
  • 3
    Существует ли способ начать писать в 2-й строке и перезаписывать все последующие строки? –  CMCDragonkai 05.07.2015, 05:33
  • 4
    @CMCDragonkai я не совсем уверен, что Вы просите. Просто распечатайте первую строку указанного файла и набора вторая строка? Первая строка и затем содержание файла? Первая строка первого файла и затем строка из второго файла для каждой остающейся строки в первом? Можно хотеть задать новый вопрос с очень определенным описанием того, что Вы хотите, и относительно короткий, но полный пример. –  Kevin 05.07.2015, 05:54

Для Вашего конкретного случая это должно быть более просто:

sed '1 { P ; x }' your-file

Объяснение: в строке 1, сделайте следующее

  1. Распечатайте строку
  2. Exchange пространство шаблона с пространством содержания (в основном освобождает буфер),

Затем строка (пустой теперь) печатается снова как часть цикла.


Если Вы хотите добавить новую строку вместо символа новой строки (что я понял первоначально), затем просто используют sedкоманда a\ (добавьте):

sed '1 a\
appended line' your-file

или даже

sed '1 aappended line' your-file

Это добавляет"appended line"после строки 1.

16
27.01.2020, 19:38
  • 1
    sed -i '1 a\\' file для просто новой строки. –  forcefsck 23.01.2012, 20:13
  • 2
    @forcefsck Да, только недостаток - то, что это - GNUism как моя секунда '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

8
27.01.2020, 19:38
sed ':a;N;$!ba;s/\n/\n\n\n/' yourBigFile

Объяснение.

3
27.01.2020, 19:38

Это могло бы работать на Вас:

sed 1G file

Если Вы хотите вставить something после новой строки:

sed '1{G;s/$/something/}' file

Или если Вы дескрипторы sed \n:

sed '1s/$/\nsomething/' file

Конечно, a еще легче:

sed '1a something' file
2
27.01.2020, 19:38
  • 1
    я сожалею, что он делает? –  Nikhil Mulley 28.01.2012, 10:31
  • 2
    Unix, Он вставляет новую строку после строки 1 –  potong 30.01.2012, 16:20
  • 3
    , Или скорее добавляет новую строку \n выровнять тот! –  potong 30.01.2012, 16:36

Используя sed и (определенные для Bash) управляющие коды ANSI:

# note: \ --> \\
printf '%s\n' 1 2 3 4 5 | sed -e $'1 { s/\\(.*\\)/\\1\\\ninserted line/; }'
0
27.01.2020, 19:38

Я обычно использую ed для этого:

(echo 1a; echo 'Line to insert'; echo .; echo w) | ed - filename

Подобный a sed решение, но без помехи завершенных новых строк.

1
27.01.2020, 19:38
  • 1
    Вы могли сэкономить некоторых echoособенно под bash: ed - filename <<< $'1a\nLine to insert\n.\nw'. –  manatwork 28.01.2012, 18:56
  • 2
    Не работает во всех оболочках, например, в dash, который во многих системах является /bin/sh. –  Arcege 28.01.2012, 19:26
  • 3
    Именно поэтому я записал, что “Вы могли сэкономить некоторых echo”. Экономия всех echoдействительно bash только функция, но сокращение echo количество от 4 до 1 работы в dash и ksh также: echo '1a\nLine to insert\n.\nw' | ed - filename. –  manatwork 28.01.2012, 19:37
  • 4
    Или просто используйте 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()`
0
27.01.2020, 19:38

Я точно так же, как использование явного счетчика:

awk '(c==1) {print "new line"} (c!=1) {print $0} {c++}' file
0
27.01.2020, 19:38

Решение Python

python -c "import sys; lines = sys.stdin.readlines(); lines.insert(1,'New Line\n'); print ''.join(lines).strip()" < input.txt
1
27.01.2020, 19:38

В простейшем методе используются printf и ex :

printf '%s\n' 1a 'my line to insert' . x | ex file

1a означает «добавить после первой строки»; . завершает добавление; x означает сохранение и выход.

0
27.01.2020, 19:38

Ни в одном из приведенных выше ответов не упоминается, как сохранить изменения в исходном файле, что, как мне кажется, и просил 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
0
27.01.2020, 19:38

Теги

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