Прямой ответ-Он ищет все вхождения числа в буквенно-цифровом тексте и удаляет их.
Пояснение-
sed 's/[^0-9]*//g' filename
состоит из следующих компонентов.
s/search_pattern/new_pattern/options
-заменить (найти и заменить)[]
-регулярное выражение. *
-подстановочный знак для 0 или более вхождений. g
-global (опция -заменяет все вхождения в этой строке)Давайте разберемся с каждым компонентом
1.sed 's/search _шаблон/новый _шаблон/параметры' имя файла
sed 's/akshat/saxena/' файл.txt
Это ищет в каждой строке шаблон «akshat» и заменяет только его первое вхождение на «saxena» в файле с именем file.txt
Здесь мы можем задать такие параметры, как g (global ), i (игнорировать регистр)
(i) g(global)
Discussed in point 4.
(ii) i - searches ignoring case (case- insensitive search)
sed ' s/life/love/i' file.txt
Replace life/Life/lIfe/liFe/life/lifE (and many more) with love
2. Регулярное выражение с использованием []
В регулярном выражении можно искать другую комбинацию или диапазон значений.
sed 's/[Li][Ii][Ff][Ee]/love/g' file
означает, что в шаблоне есть L или l, за которыми следует I или i, за которым следует F или f, за которым следует E или e. Таким образом, становится нечувствительным к регистру -поиск.
Если требуется диапазон, используется дефис (-). [a -z] означает маленькую букву от a до z, то есть все буквенные символы. [0 -9] означает от 0 до 9, то есть все числовые символы.
Таким образом, в данном коде это относится к поиску всех числовых символов.
3.*
На его месте может стоять любой символ. Таким образом, в заданном коде любой символ может следовать за регулярным выражением [0 -9]
4. г (глобальный)
replace all occurrence in that line.
Inorder to replace first occurence in particular line use
файл sed 'n s/akshat/$$/'
where n is the line number.
Вышеприведенный код заменяет шаблон «akshat» на $$ в n-й строке.
Вам потребуется следующее:
# Tag UDP packets of the "connection" with mark 50000
iptables -t mangle -A PREROUTING -p udp --dport 50000 -j CONNMARK --set-mark 50000
# Make the port redirection
iptables -t nat -A PREROUTING -p udp --dport 50000 -j REDIRECT --to-port 3478
# Count the bytes with mark 50000
iptables -m connmark -t mangle -A OUTPUT -p udp --sport 3478 --mark 50000
iptables -t mangle -nvL
затем покажет:
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
4 132 CONNMARK udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:50000 CONNMARK set 0xc350
...
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
2 66 udp -- * * 0.0.0.0/0 0.0.0.0/0 connmark match 0xc350 udp spt:3478
Пояснения:
-j REDIRECT
вы не можете создать правило, которое будет соответствовать исходящему пакету с порта 50000, потому что все исходящие пакеты соединения на порту 50000 будут соответствовать --sport 3478
, но не --sport 50000
, хотя фактический пакет покажет исходный порт UDP 50000 при захвате сети. Я не знаю, ошибка это или ожидаемое поведение (протестировано с iptables 1.8.2 (nf _таблицы))CONNMARK
, которая помечает все пакеты соединения произвольным 32 -битным целым числом на стороне PREROUTING, а затем сопоставляет ту же метку с коннмаркой . модуль на стороне ВЫХОД.