В итоге я получил задание cron, которое каждые 3 минуты касается файла на каждом cifs
общем ресурсе в mount
, чтобы поддерживать соединение. .
На данный момент общие ресурсы доступны в обычном режиме:
cifs_keepalive:
#!/bin/bash
while read spot; do
touch --no-create "${spot}/.cifs_keepalive"
done <<< "$(mount | awk '/cifs/{ print $3; }')"
/etc/cron.d/cifs_keepalive:
*/3 * * * * root /home/bcait/bca_util/bin/cifs_keepalive >/dev/null 2>&1
Кредиты: я почерпнул идею из этого сообщения в блоге.
Предполагается, что оболочка csh
:
Чтобы просто добавить строку после другой:
% sed '/line2/a\\
# new line here\
' file
line1
line2
# new line here
line3
line4
Чтобы вставить строку перед другой:
% sed '/line3/i\\
# new line here\
' file
line1
line2
# new line here
line3
line4
Замена строки двумя новыми строками с помощью команды s
:
% sed 's/line2/&\\
# new line here/' file
line1
line2
# new line here
line3
line4
Протестировано на OpenBSD 6.1 с запущенными sed
и csh
из базовой системы.
С GNU sed ваш код работает просто отлично:
$ sed -e 's/line2/line2\n#this line was added by sed/' file
line1
line2
#this line was added by sed
line3
line4
Однако для BSD sed \n
не рассматривается как новая строка в замещающем тексте. Если у вас оболочка bash, хороший обходной путь — использовать $'...'
для вставки новой строки:
$ sed -e $'s/line2/line2\\\n#this line was added by sed/' file
line1
line2
#this line was added by sed
line3
line4
В дополнение к поддержке bash, zsh и ksh $'.. .'
.
Другой вариант — вставить настоящую новую строку:
$ sed -e 's/line2/line2\
#this line was added by sed/' file
line1
line2
#this line was added by sed
line3
line4
ОБНОВЛЕНИЕ: В csh этот последний вариант требует дополнительных \
:
% sed -e 's/line2/line2\\
#this line was added by sed/' file
line1
line2
#this line was added by sed
line3
line4
Похоже, вам действительно нужна команда a ppend. Используя Bash или любую оболочку, которая поддерживает $'\n'
(, большинство делает):
sed $'/line2/a\\\n#this line was added by sed\n' file.txt
Или, что более читабельно, с помощью файла команд sed:
/line2/a\
#this line was added by sed
Чтобы показать полный метод:
$ cat file.txt
line1
line2
line3
line4
$ cat sedfile
/line2/a\
#this line was added by sed
$ sed -f sedfile file.txt
line1
line2
#this line was added by sed
line3
line4
$