Я хочу вставить текст вверху уже существующего файла. Как я могу этого добиться. Я пробовал echo
и tee
, но не смог.
Я пытался вставить строку репо вверху файла sources.list
из терминала.
Мне нужно быстрое решение в одну строку, потому что метод другого ответа мне уже известен
На самом деле это довольно легко с sed
:
sed -i -e '1iHere is my new top line\' filename
1i
говорит sed вставить следующий текст в строке 1 файла; не забывайте перевод строки \
в конце, чтобы существующая строка 1 была перемещена в строку 2.
В общем, редактирование на месте с помощью скрипта сложно, но вы можете использовать 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, вы должны добавить некоторую проверку и пуленепробиваемость для обнаружения ошибок и т. д., потому что вы действительно не хотите потерять это. Но это отдельный вопрос: -)
Вы можете использовать Vim в режиме Ex:
ex -sc '1i|hello world' -cx sources.list
1
выберите 1-ю строку
i
вставить новую строку текста
x
сохранить и закрыть
Всегда есть опция 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
./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
А почему бы не использовать для этого настоящий текстовый редактор? Эд является стандартным текстовым редактором.
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
: написать и выйти, спасибо, до свидания.