Похоже, что это правило является частью большого набора правил.
-t raw -I OUPUT
:вставить это правило в начало цепочки OUTPUT таблицыraw
-j CT
:если условия выполнены перейти к целиCT
-p udp
:протокол должен быть udp -m udp
:используйте расширение udp
-, необходимое для фильтрации портов udp ---dport 69
:применяется к датаграммам udp с портом назначения 69 --helper tftp
:для отслеживания связанных дейтаграмм используйте ожидания дляtftp
ссылка:«помощники» на regit.org
Вы можете просто использоватьgrep
:
cells=$(grep -F "rx cells" "$co_result" | grep -oE "[0-9]+")
это извлечет число в вашу переменную с помощью:
grep -F "rx cells" $co_result
:это извлечение строки, содержащейrx cells : 1707
grep -oE "[0-9]+"
:выводить только совпадение регулярного выражения, которое соответствует только числу :1707
Вы также можете использовать более изящную групповую замену sed
для извлечения значения, подобного этому:
cells=$(sed -r -n 's/rx cells.*\W([0-9]+)/\1/p' "$co_result")
-r
:включить расширенное регулярное выражение -n
:печатать только явную строку rx cells.*\W([0-9]+)
соответствуетrx cells
.*\W
соответствует любому символу до тех пор, пока словесный символ, отличный от -, и ([0 -9]+ )не захватят в группу одну или несколько цифр. \1
заменить вывод группой один, которая содержит n захваченных цифр. Ваша подстановка команд излишне сложна.
Вместо:
cells=$( awk '/rx cells/ { print $NF }' <"$co_result" )
printf 'Var_value: %s\n' "$cells"
$NF
будет последним полем, разделенным пробелом -в строке, и оно печатается, если строка содержит строку rx cells
.
Также убедитесь, что входной файл является текстовым файлом Unix, а не текстовым файлом DOS. Запустите dos2unix
для файла, чтобы преобразовать его в текстовый файл Unix.
Глядя на вашу команду:
grep -e 'cells' $co_result | cut -d: -f2 | awk '{print $1}'| awk 'NR%2{printf $0"";next;}1'
Первый:grep -e 'cells' $co_result
завершится ошибкой, если $co_result
содержит пробел, табуляцию, новую строку или любой другой специальный символ (, поскольку он не заключен в кавычки ).
Вывод команды
tx cells : 468
rx cells : 1707
Тогда:cut -d: -f2
. Это выводит
468
1707
Тогда:awk '{print $1}'
. Это выводит то же самое, что и выше, но с удаленными начальными пробелами
Тогда:awk 'NR%2{printf $0"";next;}1'
.Это запутанный способ сделать paste -d' ' - -
и вывести
468 1707
Позже echo
выведет
Var_value: 468 1707
Причина, по которой вы этого не видите, заключается в том, что ваш входной файл является текстовым файлом DOS и содержит символы возврата каретки в конце каждой строки. Поэтому курсор возвращается к началу строки после печати 468
.
Используйте dos2unix
во входном файле.
Откуда вы взяли 530
, я не знаю.