Я пытаюсь изменить .profile (Ubuntu) следующим образом:
Исходный раздел файла .profile:
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
Я хочу изменить приведенный выше код, чтобы он выглядел так:
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
BASHRC_CONFIG_DIR=/netshare/users/$USER/
if [ -f "$BASHRC_CONFIG_DIR/.bashrc" ]; then
. "$BASHRC_CONFIG_DIR/.bashrc"
fi
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$BASHRC_CONFIG_DIR/.bashrc" ]; then
. "$BASHRC_CONFIG_DIR/.bashrc"
else
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
fi
# set PATH so it includes user's private bin if it exists
Я пробовал так много итераций sed, чтобы заменить блок в верхнем файле файлом, содержащим нижний раздел, и я бьюсь головой о стену. Есть ли у кого-нибудь какие-либо знания sed (или awk), которые они могут передать мне, чтобы я мог добиться этого и положить на голову пакет со льдом?
Я пробовал это:
sed -n \
-e "1,/umask 022/ p" \
-e"/set PATH/,$ p" \
-e "/umask 022/ r profile_insertion" \
/home/username/.profile.bak
И это:
sed -i 's/(umask 022).*(#set PATH)/\1 profile_insertion \2/g' /home/username/.profile
(profile_insertion содержит текст, который я хочу поместить)
sed
— лучший инструмент для простой заменыs/old/new/
в отдельных строках. Если вам нужно сделать что-то большее (как вы), вам гораздо лучше использоватьawk
для ясности, надежности, эффективности, переносимости, простоты обслуживания/улучшения и т. д. - person Ed Morton   schedule 20.02.2021umask 022
и#set PATH
) точно в тех же местах, что и .profile в вашем вопросе? Если .profile всегда являются общими, почему бы просто не отредактировать 1 .profile и не скопировать его в остальные 99? - person Ed Morton   schedule 20.02.2021