I have an http server on my Solaris 11 system and I want to block all http requests from other systems.
Предполагая, что вы хотите разрешить доступ только с самого фактического хоста веб-сервера, самый простой способ сделать это — просто настроить веб-сервер для прослушивания 127.0.0.1:80
или localhost:80
вместо чего-то вроде 0.0.0.0:80
или 192.168.1.211:80
.
Сperl
:
perl -pe 's(\{\{ value_(\d+) \}\})(`cmd $1`)ge' < some.conf
Обратите внимание, что здесь безопасно, так как $1
гарантированно не будет -пустым и не будет содержать символов, которые являются специальными в синтаксисе оболочки (только цифры )и perl
даже обходит оболочку здесь. Но если вы измените\d+
(последовательность одной или нескольких цифр )на что-либо другое, это станет опасным (как для таких значений, как foo;reboot
), и вы можете использовать более безопасный подход, например:
perl -pe '
s(\{\{ value_(.*?) \}\})(
open my $fh, "-|", "cmd", $1 or die "cannot start cmd: $!";
local $/ = undef;
<$fh>;
)ge' < some.conf
Если cmd
принимает параметры, вы, вероятно, захотите заменить "cmd"
на "cmd", "--"
или qw(cmd --)
(, предполагая, что он поддерживает --
в качестве маркера конца -из -параметра )на избежать проблем со значениями, начинающимися с-
(и, возможно,+
).
В любом случае,while read
циклов оболочки лучше избегать при обработке текста .
С GNU awk для соответствия 3-го аргумента():
$ cat tst.awk
match($0,/(.*{{ value_)([0-9]+)( }}.*)/,a) {
cmd = "echo \"<foo_" a[2] "_bar>\""
if ( (cmd | getline output) > 0 ) {
$0 = a[1] output a[3]
}
close(cmd)
}
{ print }
$ awk -f tst.awk some.conf
# this is a config file
key: {{ value_<foo_12345_bar> }}:hello
something
another_key: return:{{ value_<foo_56789_bar> }}/yeah
и с любым awk:
$ cat tst.awk
match($0,/{{ value_[0-9]+ }}/) {
cmd = "echo \"<foo_" substr($0,RSTART+9,RLENGTH-12) "_bar>\""
if ( (cmd | getline output) > 0 ) {
$0 = substr($0,1,RSTART+8) output substr($0,RSTART+RLENGTH-3)
}
close(cmd)
}
{ print }
$ awk -f tst.awk some.conf
# this is a config file
key: {{ value_<foo_12345_bar> }}:hello
something
another_key: return:{{ value_<foo_56789_bar> }}/yeah