Как вставить строку в верхней части текстового файла с помощью командной строки?

В настоящее время нет способа, по крайней мере, не известного простого способа запуска молнии непосредственно из командной строки. Здесь есть отслеживание ошибок: https://bugzilla.mozilla.org/show_bug.cgi?id=359807

Вы можете добавить себя в список CC (как то, что я сделал), чтобы получить информацию об этом

Sunbird - это автономный календарь, но Mozilla прекратил его, поэтому я не могу рекомендовать его для вас.

1
задан 21 July 2012 в 14:06

5 ответов

В общем редактирование на месте с помощью скрипта сложно, но вы можете использовать echo и cat, а затем mv

echo "fred" > fred.txt
cat fred.txt t.txt >new.t.txt
# now the file new.t.txt has a new line "fred" at the top of it
cat new.t.txt
# can now do the rename/move
mv new.t.txt t.txt

Однако, если вы играете с sources.list вам нужно добавить некоторые проверки и пуленепробивание, чтобы обнаружить ошибки и т. д., потому что вы действительно не хотите этого потерять. Но это отдельный вопрос: -)

6
ответ дан 25 May 2018 в 10:06
  • 1
    Я могу это сделать уже. Мне нужно однострочное решение, которое дал izx. однако спасибо за ваш ответ. – Anwar 16 June 2012 в 17:52
  • 2
    @AnwarShah - извините! Вы должны были сказать это в своем вопросе :-) – Sean 16 June 2012 в 17:56
  • 3
    Я признаю, +1 за ваш ответ, а также за комментарий. (я не могу дать больше) – Anwar 16 June 2012 в 18:57
  • 4
    @AnwarShah, спасибо! – Sean 16 June 2012 в 19:05
./prepend.sh "myString" ./myfile.txt

известно, что prepend является моей пользовательской оболочкой:

#!/bin/sh
#add Line at the top of File
# @author Abdennour TOUMI
if [ -e $2 ]; then
    sed -i -e '1i$1\' $2
fi

Используйте также путь relatif или абсолютный путь, он должен работать нормально:

./prepend.sh "my New Line at Top"  ../Documents/myfile.txt

Update:

, если вы хотите создать постоянный скрипт, откройте nano /etc/bash.bashrc, затем добавьте эту функцию в конец файла:

function prepend(){
# @author Abdennour TOUMI
if [ -e $2 ]; then
    sed -i -e '1i$1\' $2
fi

}

. Повторно запустите терминал и наслаждайтесь:

prepend "another line at top" /path/to/my/file.txt
6
ответ дан 25 May 2018 в 10:06

И почему бы не использовать для этого подлинный текстовый редактор? ed - стандартный текстовый редактор.

ed -s filename <<< $'1i\nFIRST LINE HERE\n.\nwq'

Или, если вы хотите, чтобы команды были более читабельными:

ed -s filename < <(printf '%s\n' 1i "FIRST LINE" . wq)
1: перейти к первой строке i: вставьте режим, в который вы хотите вставить ... .: прекратите вставку, вернитесь в нормальный режим wq: напишите и выйдите, спасибо, до свидания.
5
ответ дан 25 May 2018 в 10:06
  • 1
    Как использовать замену переменных оболочки (в FIRST LINE) с этим? – vp_arth 2 February 2015 в 12:08
  • 2
    @vp_arth Если ваш контент находится в переменной first_line, тогда: ed -s filename < <(printf '%s\n' 1i "$first_line" . wq). Убедитесь, что переменная не расширяется до одной точки и не содержит символов новой строки (поэтому дезинфицируйте ее, если она исходит от пользовательского ввода). – gniourf_gniourf 2 February 2015 в 17:25

Всегда есть опция awk. Замените переменную string содержимым. Однако это не изменение на месте. Лично я склонен не делать изменений на месте. Это, безусловно, личное предпочтение. Две вещи, -v означает, что переменная в awk и переменная n используются здесь для сопоставления номера строки, эффективно NR == 1. Вы можете использовать это несколькими способами, просто изменив значение n и s.

string="My New first line"; awk -v n=1 -v s="$string" 'NR == n {print s} {print}'     file.source > file.target

Пример:

% cat file.source                                                                                                                                      

First Line
Second Line
Third Line

% string="Updated First Line"; awk -v n=1 -v s="$string" 'NR == n {print s} {print}' file.source > file.target; cat ./file.target                      !698

Updated First Line
First Line
Second Line
Third Line
3
ответ дан 25 May 2018 в 10:06

Вы можете использовать Vim в режиме Ex:

ex -sc '1i|hello world' -cx sources.list
1 выбрать первую строку i вставить новую строку текста x сохранить и закрыть
0
ответ дан 25 May 2018 в 10:06

Другие вопросы по тегам:

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