Скажем, у меня был блок текста в ~/.bashrc
:
#~/.bashrc
# ...some commands...
# aliases
alias suicide='sudo rm -rf /'
# end aliases
# other commands
Я хочу заменить этот блок текста другим текстом, содержащимся между двумя маркерами в другом файле: stuff-to-place-in-bashrc.txt
# stuff-to-place-in-bashrc.txt
# ...stuff...
# aliases
alias ldir='ls * -d'
alias ithinklifeisworthliving='echo all good'
# end aliases
# ...more stuff...
я пробовал
sed -ne 's/# aliases\s+\(.*\)\s+# end aliases/\1/' stuff-to-place-in-bashrc.txt
Но я действительно раскачиваюсь в темноте здесь. Может ли кто-нибудь помочь мне?
Как извлечь текст из
stuff-to-place-in-bashrc.txt
?Как заменить другой раздел
~/.bashrc
извлеченным текстом из вопроса 1?
редактировать
Спасибо за обновления, ребята, те, кто интересуется, почему я хочу что-то вроде этого:
позволяет выбирать выбранные файлы сценариев без перезаписи дополнений, сделанных пользователем. полезен для общих и часто обновляемых стандартных операционных сред (например, моя последняя работа в Tyro , написанная на XP).
сойти с ума, ребята.
bash
text-processing
regular-expression
thenaglecode
источник
источник
# aliases
и# end aliases
), и это может сработать для вас.Ответы:
Ed является стандартным редактором, потому что вы можете использовать его для разработки сценариев ed и позволить ему выполнять свою работу, как вы тестировали ранее, в интерактивном режиме. Для небольших файлов, таких как
.bashrc
или любой кодовый текст, ed является производительным, потому что он читает весь файл в один прием и работает с буфером. По той же причине вы не должны использовать ed для больших файлов, таких как файлы журналов.Но с помощью сценария ed ваша работа будет выполнена в кратчайшие сроки:
Я использую аналогичные сценарии для автоматической настройки файлов конфигурации, например, alas .asoundrc для различных сред, в которых я использую свой ноутбук.
Лучший документ об ed - это простая справочная страница из очень классной системы PLAN9 . Я перевел это в постскриптумный документ ed.ps. Если вы заинтересованы в PLAN9, вы должны проверить 9front и http://cat-v.org/ поскольку оригинальная версия все еще поддерживается, но имеет очень простую файловую систему.
Последнее слово о войнах редакторов, emacs, vim и т. П .: Правила acme!
источник
w
,q
)/^# aliases
, и/^# end aliases/
), а остальные команды Vi / Ed. См., Например, vimhelp.appspot.com/cmdline.txt.html#%3Arange для+, /^# end aliases/
.info Ed
в вашей системе (надеюсь). Я не знаю, почему современные дистрибутивы Linux не устанавливают этот классный редактор. w и q - команды записи и выхода. И ed работает очень похоже на sed с регулярными выражениями. Есть причина, почему названия звучат так схоже. d означает удаление адресных строк, -r читает в предыдущую строку результаты!
следующей команды. Я сокращаю имена файлов при редактировании, так как я так ленив, печатая этим ранним утром.Если вы хотите редактировать файл на месте
ed
, это очень хорошее решение. Если вы хотите редактировать его в потоке, используйтеsed
. Избегайтеsed -i
.источник
Конечно, вы можете сделать это
ed
самостоятельно, без дополнительных инструментов:если вы довольны результатом, замените
,p
на,w /home/username/.bashrc
чтобы записать изменения в~/.bashrc
(обратите внимание на полный путь, используемый сr
иw
; вы можете просто использовать,.bashrc
если он естьcwd
).Как это работает: мы сначала
d
выбираем ненужные строки изstuff_to_place.txt
. Затем мы удаляем остальные (псевдонимы) с помощью,d
. Теперь текстовый буфер пуст, а буфер обрезки содержит нужные нам строки. Затем мыr
добавляем содержимое.bashrc
в текстовый буфер, помещаем содержимое буфера обрезки (x
) после/# aliases/
строки, дублируем последнюю вставленную строку (.t.
), затем удаляем из дублированной строки до, но не включая/# end aliases/
и, наконец,p
ринту илиw
обряд изменения иq
уит.источник