Ну, у меня другое мнение:
a:~# nc -luk 10.12.0.12 667 // listen on UDP port 667
b:~# nc -uv 10.12.0.12 667 // check if port is open
nc: 10.12.0.12 (10.12.0.12) 667 [667] open
I love stackexchange // send a message
a:~# nc -luk 10.12.0.12 667
I love stackexchange // receive the message.
Таким образом, на основе этого вы можете проверить, возможно ли соединение между a и b на этом порту udp. Позже вы можете продолжить проверку с помощью tcpdump.
Это извлечет все символы перед последним «двоеточием» и удалит скобки [ ] как в приведенном вами примере.
rev <yourfile.txt | cut -d: -f2- | rev | tr -d '[]'
Замените yourfile.txt на имя вашего файла или удалите слово <yourfile.txt
, чтобы прочитать стандартный вывод.
awk -F: '{OFS=":"; NF--; print $0}' $file
или
cat file | awk -F: '{OFS=":"; NF--; print $0}'
, который разбивается на:
-F:
установить разделитель полей ввода на:
OFS=":"
установить разделитель полей вывода на:
NF--
уменьшить количество полей на 1 (убрать последнее поле)print $0
распечатать остальные записи, разделенные символом OFS (:
). Обновление для удаления квадратных скобок:
awk -F: '{OFS=":"; NF--; gsub(/\[|\]/, ""); print $0}' $file
gsub(/\[|\]/, "")1
, который выполняет глобальную замену квадратных скобок, заменяя их ничем и возвращая замененную строку. Удалите все после последнего двоеточия, а затем все скобки, оставшиеся где угодно:
sed 's/:[^:]*$//; s/[][]//g'
Или
sed 's/\(.*\):.*/\1/; s/[][]//g'
(здесь используется тот факт, что первый .*
будет жадным и проглотит как можно больше :
s ).
Только оболочка:
while IFS= read -r line; do
tmp=${line%:*} # remove last colon and following chars
tmp=${tmp#"["} # remove leading open bracket
result=${tmp%"]"} # remove trailing close bracket
printf "%s\n" "$result"
done < file
Команда:
awk -F ":" 'OFS=":"{$NF="";print $0}' filename | sed "s/:$//g"| sed "s/^\[//g"|sed "s/\]//g"
выход
256.XXX.XXX.X
214.XXX.XXX.X
2200:XXXX:XXXX:XXX:XXXX:XXXX:XXXX:XXXX