Для входящих ssh соединений (без отслеживания соединения)
iptables -t mangle -A OUTPUT -p tcp --dport 22 -j MARK --set-mark 22
Для исходящих ssh соединений (без отслеживания соединения)
iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 22
Вы должны иметь возможность объединить их, используя -порт
вместо -порт
и --спорт
Скорее всего, было бы лучше использовать отслеживание соединения, но вышеприведенные правила должны заставить вас двигаться дальше.
Этот ответ основан на приведенном выше ответе, который очень похож на JSON, поэтому я ' Поэтому мы предположили, что это, вероятно, JSON
. Но в вашем образце он неполный, что, как я полагаю, является опечаткой. Если это не так ... ну, у вас уже есть ответы sed
.
Пожалуйста, не используйте регулярное выражение для синтаксического анализа JSON
. Это мерзко. regex плохо работает с рекурсивными типами данных с тегами, такими как JSON
/ XML
. В лучшем случае это грязный хакер, который в будущем создаст хрупкий код.
Точно так же - JSON
важно, чтобы он был полным - мне пришлось угадывать, как выглядит ваш полный JSON
.
Предположим, что JSON
подобен этому (использовался http://jsonlint.com/ для очистки элементов)
{
"s220823vaps2512": {
"hostname": "s220823vaps2512",
"description": "data",
"type": "Virtual",
"os": "data",
"idc": "data",
"environment": "data",
"deviceclass": "data",
"cores": "data",
"memory": "data",
"frontnet": "data",
"ipset": {
"backnet": "data",
"storagenet": "data",
"metroclusternet": "data"
},
"roles": "data",
"mounts": "data"
},
"s220823vaps2513": {
"hostname": "s220823vaps2513",
"description": "data",
"type": "Virtual",
"os": "data",
"idc": "data",
"environment": "data",
"deviceclass": "data",
"cores": "data",
"memory": "data",
"frontnet": "data",
"ipset": {
"backnet": "data",
"storagenet": "data",
"metroclusternet": "data"
}
}
}
Тогда способ просто получить нужные биты:
#!/usr/bin/env perl
use strict;
use warnings;
use JSON;
my $input = ### as above, snipped for brevity.
#decode/validated
my $json = decode_json ( $input );
#create new JSON array of elements.
my $new_json = [map { $json -> {$_} } keys %$json];
#print it out.
print to_json ( $new_json, { pretty => 1, canonical => 1 } );
И таким образом вы создаете допустимый вывод JSON, а также обрабатываете случаи, когда, например, порядок ключей другой (который полностью действителен в JSON).
Просто с sed
:
sed 's/^[^{]*{/{/' file
{
( ^ [^ {]
), ноль или более раз *
, за которым следует {
. {
. Изменить : если вы хотите исключить некоторые шаблоны из замены (например, строка "ipset":
), используйте это:
sed '/"ipset":/n;s/^[^{]*{/{/' file
"ipset ":
, перейти к следующей строке n
. Похоже, это работает, по крайней мере, на примере предоставленных вами данных:
sed -'s/^ .*{/{/' file
Он преобразует первую строку каждого блока "имя" {
(обратите внимание на начальный пробел) до {