Окончательное решение будет таким:
$ sed 's:/:\\/:g' <<<"$str"
\/tmp\/test\/folder1\/test.txt
Но объяснить, как туда добраться:
Да, вы пропустили одну обратную косую черту:
$ str='/tmp/test/folder1/test.txt'
$ sed "s/\//\\\\\//g" <<<"$str"
\/tmp\/test\/folder1\/test.txt
Я надеюсь, что один пробел прояснит ситуацию:
$ sed "s/\//\\\\ \//g" <<<"$str"
\ /tmp\ /test\ /folder1\ /test.txt
Но если вы измените разделитель sed на :
(, например):
$ sed "s:\/:\\\\\/:g" <<<"$str"
\/tmp\/test\/folder1\/test.txt
Но это не совсем правильно, так как (теперь не специальный)/
не нуждается в скейпинге:
$ sed "s:/:\\\\/:g" <<<"$str"
\/tmp\/test\/folder1\/test.txt
И, если вы будете использовать одинарные кавычки вместо двойных, оболочка не изменит двойную \\
на единицу, поэтому меньше \
будет правильным:
$ sed 's:/:\\/:g' <<<"$str"
\/tmp\/test\/folder1\/test.txt
Что гораздо чище.
Итак, вывод iptables -t nat -L
показал:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere anywhere tcp dpt:domain to:8.8.8.8
DNAT udp -- anywhere anywhere udp dpt:domain to:8.8.8.8
DNAT tcp -- anywhere anywhere tcp dpt:domain to:8.8.8.8
DNAT udp -- anywhere anywhere udp dpt:domain to:8.8.8.8
, что было действительно странно. Я удалил эти правила, введя iptables -t nat -D #
, и теперь DNS-запросы блокируются. Спасибо всем, кто пытался помочь. Действительно ценю это.