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

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

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

Заметка

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

На самом деле это довольно просто:

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

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

 ./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 

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

 ./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 

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

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

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

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

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

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

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

Пример:

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

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

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

  2. i вставляю новую строку текста

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