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

Я хочу вставить текст вверху уже существующего файла. Как я могу этого добиться. Я пробовал echo и tee, но не смог.

Я пытался вставить строку репо вверху файла sources.list из терминала.

Примечание

Мне нужно быстрое решение в одну строку, потому что метод другого ответа мне уже известен

25
задан 21 July 2012 в 13:06

6 ответов

На самом деле это довольно легко с sed:

  • sed -i -e '1iHere is my new top line\' filename

  • 1i говорит sed вставить следующий текст в строке 1 файла; не забывайте перевод строки \ в конце, чтобы существующая строка 1 была перемещена в строку 2.

0
ответ дан 21 July 2012 в 13:06

В общем, редактирование на месте с помощью скрипта сложно, но вы можете использовать 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, вы должны добавить некоторую проверку и пуленепробиваемость для обнаружения ошибок и т. д., потому что вы действительно не хотите потерять это. Но это отдельный вопрос: -)

0
ответ дан 21 July 2012 в 13:06

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

ex -sc '1i|hello world' -cx sources.list
  1. 1 выберите 1-ю строку

  2. i вставить новую строку текста

  3. x сохранить и закрыть

0
ответ дан 21 July 2012 в 13:06

Всегда есть опция 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
0
ответ дан 21 July 2012 в 13:06
./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

Обновление:

если Вы хотите постоянный сценарий для этого, открытого 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
ответ дан 21 July 2012 в 13:06

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

ed -s filename <<<  

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

ed -s filename < <(printf '%s\n' 1i "FIRST LINE" . wq)
  • 1: перейти к первой строке
  • i: режим вставки [ 119]
  • ваши вещи, которые вы хотите вставить ...
  • .: прекратить вставку, вернуться в нормальный режим
  • wq: написать и выйти, спасибо, до свидания.
1i\nFIRST LINE HERE\n.\nwq'

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

ed -s filename < <(printf '%s\n' 1i "FIRST LINE" . wq)
  • 1: перейти к первой строке
  • i: режим вставки [ 119]
  • ваши вещи, которые вы хотите вставить ...
  • .: прекратить вставку, вернуться в нормальный режим
  • wq: написать и выйти, спасибо, до свидания.
0
ответ дан 21 July 2012 в 13:06

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

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