Я бы написал:
while IFS= read -r line; do
for ((i=0; i<${#line}; i++)); do
char=${line:i:1}
((count++))
((low <= count && count <= high)) && char=$new_char
printf '%s' "$char"
done
echo
done <"$input"
Использование GNU sed в расширенном регулярном выражении -E
мы устанавливаем пространство шаблона новой строки 59, а затем продолжаем смещаться сверху, пока не наткнемся на строку шаблона. В этот момент целевая строка является последней строкой в пространстве шаблона.
sed -Ee ':top
1,59{
$q;N;b top
}
$!N
/^[^\n]*two/s/[^\n]*$/MODIFIED/
P;D
' file
Примечание:
Отредактируйте набор правил и замените «ВОЗВРАТ» на «ВПЕРЕД», пока вы определяете политику по умолчанию.
Ссылка:https://www.linuxtopia.org/Linux_Firewall_iptables/x4604.html
Таким образом, в основном проблема заключалась в том, что я пропускал-i
(--в опции -интерфейса ), чтобы указать имя входного сетевого интерфейса.
Почему я пропустил? Ну, я думаю, потому что:
-i
с непонятным значением ext_if
. В качестве первой причины этой ошибки я не (не мог )понять, что это ext_if
означает после некоторого поиска в Google и тому подобного. sudo iptables --list
ничего не показывает об указанных значениях-i
(или -или ). Поэтому я подумал, что этот вариант в любом случае не так важен и полностью игнорируется. (вы можете перечислить с опцией -v, например.sudo iptables --list DOCKER-USER -v
)Благодаря комментарию @A.B, я еще раз просмотрел тот же документ полностью, перепробовал все от нуля до последнего и нашел решение.
Итак, наконец, набор команд, которые я выполнил и решил проблему, выглядит следующим образом.
$ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nameOfContainer # check the docker container's local ip e.g. 172.17.0.3
# assumes the docker container ip is 172.17.0.3,
# the "internal" docker container port (e.g. "443" for "0.0.0.0:8122->443/tcp") you want to filter is 443,
# the network interface (you can check with e.g. `ip addr`) is wlp2s0.
sudo iptables -I DOCKER-USER -i wlp2s0 -p tcp -m tcp --dport 443 -d 172.17.0.3 -j DROP
sudo iptables -I DOCKER-USER -i wlp2s0 -p tcp -m tcp --dport 443 -d 172.17.0.3 -s xx.xx.xx.xx -j ACCEPT
sudo iptables -I DOCKER-USER -i wlp2s0 -p tcp -m tcp --dport 443 -d 172.17.0.3 -s yy.yy.yy.0/24 -j ACCEPT
Таким образом, результат списка будет похож на:
$ sudo iptables --list DOCKER-USER -v
[sudo] password for user:
Chain DOCKER-USER (1 references)
pkts bytes target prot opt in out source destination
10 704 ACCEPT tcp -- wlp2s0 any yy.yy.yy.0.static.xtom.com/24 172.17.0.3 tcp dpt:https
20 1900 ACCEPT tcp -- wlp2s0 any xx-xx-xx-xx.oo.oo.vectant.ne.jp 172.17.0.3 tcp dpt:https
30 1760 DROP tcp -- wlp2s0 any anywhere 172.17.0.3 tcp dpt:https
145K 60M RETURN all -- any any anywhere anywhere