Это не совсем то, что помещает все в одно и то же место, но, по крайней мере, позволяет вам получить доступ ко всему, что вам нужно, как если бы оно было. Он должен решить ваши проблемы с доступом, поместив каждую платформу в свою собственную систему и позволяя вам видеть все свои источники как один диск или как вы решите настроить его.
Они описывают это как децентрализованную программную платформу для хранения файлов.
Я планирую использовать ее сам, чтобы иметь единую точку доступа к моему ноутбуку / дому и облачные диски из одной точки. Затем для каждой платформы существуют клиенты для доступа к данным аналогично тому, как работает DropBox.
Это должно заменить необходимость в BTSync, но также даст вам возможность добавить безопасность системы хранения с контролируемой версией. Причина, по которой я поднял этот вопрос, заключается в том, что мой коллега потерял кучу данных, когда он был атакован программой-вымогателем, и BTSync выполнил свою работу, но это означало, что все копии данных были зашифрованы и потеряны. Восстановлению подлежал только тот набор, который также находился в облачной системе хранения.
Поскольку у вас есть два состояния, что наличие двух разных строк смещения между ними - задача для awk (или perl, или python). Поскольку мой текущий язык - python, программа будет выглядеть так:
import sys
rule_file = sys.argv[1]
new_rules = sys.argv[2]
mode = "save_rules"
for line in open(rule_file):
line = line.strip()
if line == "#start":
print line
print new_rules
mode = "replace_rules"
elif line == "#end":
mode = "save_rules"
print line
elif mode == "save_rules":
print line
Теперь сохраните это в rule_replace.py и вызовите его с помощью
python rule_replace.py my_rule_file.txt 'FirewallRuleSet global {
FirewallRule allow tcp to google.com
FirewallRule deny tcp to facebook.com
FirewallRule deny tcp to twitter.com
FirewallRule allow tcp to exaple.com
#more rules
}' >new_rules.txt
. Конечно, вам не нужно помещать новые правила в командную строку, я предполагаю, что вы будет иметь их в переменной оболочки, и тогда вызов будет выглядеть так:
$ python rule_replace.py my_rule_file.txt $new_rules
Обратите внимание, что этот сценарий, хотя он работает, не является решением для чего-то в производстве. Он не обнаруживает никаких ошибок (например, если нет исходного файла). Он предполагает, без проверки, что за строкой #start всегда следует строка #end и что строки точно такие, как вы описали. Он также может использовать некоторое ведение журнала, если будет запущен в производство.
На основе ответа G-Man и комментария:
sed -i '/#start/,/#end/ {
//!d
/#start/a\
some new text\
more lines\
end of new text (no backslash here!)
}' myconfig
Объяснение:
/ # start /, / # end / {....}
выполняет команды в фигурных скобки для каждой строки между текстом «#start» и «#end» (включительно). Сравните ответ G-Man. a
- это команда добавления. Он выполняется только в строке, соответствующей "#start", чтобы добавить новый текст. Он добавляет строки до тех пор, пока не появится строка, которая не заканчивается обратной косой чертой + новой строкой. Используйте
sed '/#start/,/#end/replace_command'
Например, если файл называется myconfig
,
и вы хотите заменить "разрешить "с" запретить "в этом разделе можно сказать
sed '/#start/,/#end/s/allow/deny/' myconfig
. Это оставит файл нетронутым и отобразит в стандартном выводе
, как файл будет выглядеть после модификации.
Вам, вероятно, следует сделать это в первую очередь,
чтобы убедиться, что вы правильно поняли команду.
Если вы действительно хотите изменить файл, добавьте параметр -i
:
sed -i '/#start/,/#end/s/allow/deny/' myconfig
Если вы хотите заменить весь текст ( все текст) между этими двумя строками, вы можете сделать что-то более простое, чем ответ Лукаса :
sed '/#start/,/#end/c\ New text line 1\ New text line 2\ ︙ \ New text line n-1\ New text line n (last)' ← Close quote; no backslash here
c
это c hange в sed
(и ed
);
это означает «заменить всю строку (строки)».
Нельзя просто оставить строки #start
и #end
нетронутыми.
Если вы хотите сохранить их, вы должны снова вставить их:
sed -i '/#start/,/#end/c\
#start\
FirewallRuleSet global {\
FirewallRule allow tcp to google.com\
FirewallRule deny tcp to facebook.com\
︙ \
\
#more rules\
}\
#end' myconfig
/ # start /, / # end /
указывает диапазон -
строки из первой строки, содержит #start
через первую строку после той, которая содержит #end
.
Если вам нужно найти строки, содержащие эти строки и ничего больше,
используйте / ^ # start $ /, / ^ # end $ /
.
Создание G -Ответ человека, вот как это сделать И использовать настраиваемые разделители И подстановку переменных (Из-за сложности это не было сразу очевидно)
Дан входной файл.txt:
Line1
Line2
<!-- /START_MARKER/ -->
Line4
Line5
Line6
<!-- /END_MARKER/ -->
Line8
Line9
Используйте эти команды/скрипт:
customtext="Any kind of variable text here"
sed -i '\%<!-- /START_MARKER/ -->%,\%<!-- /END_MARKER/ -->%c\
foo '"$customtext"' abcxyz whatever' inputfile.txt
Результаты в:
Line1
Line2
Any kind of variable text here
Line8
Line9
Здесь многое происходит, объяснено ниже:
'
-Чтобы заключить все в одинарные кавычки
\%
-При использовании пользовательского разделителя (, например. если ваш маркер имеет /
вы ДОЛЖНЫ использовать другой разделитель )он должен быть экранирован здесь
<!-- /START_MARKER/ -->
-буквальный маркер начала, в данном случае это дурацкий пример для демонстрационных целей.
%
-разделитель sed, не экранированный
,
-запятая (?)
\%
-снова разделитель sed, на этот раз ДОЛЖЕН быть экранирован
<!-- /END_MARKER/ -->
-Буквенный маркер окончания
%c
-разделитель sed (не экранирован )иc
\
-обратная косая черта, означающая, что следующий текст/строки следует использовать в качестве замены
foo
-текст замены
'"$customtext"'
-текст пользовательской переменной,обратите внимание на использование '
, а затем "
для включения замены переменных, затем "
и '
для возврата в режим произвольного текста
abcxyz whatever
-дополнительный текст замены
'
-закрывающая одинарная кавычка
inputfile.txt
-имя файла