Это регулярное выражение захватывает IP-адрес и является довольно точным регулярным выражением для IPv4-адресов, grep -P
включает механизм регулярных выражений PCRE и -o
возвращает только соответствующий текст:
grep -Po '\b((?:25[0-5]|[2][0-4][0-9]|[1][0-9]{2}|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|[2][0-4][0-9]|[1][0-9]{2}|[1-9][0-9]|[0-9])\b' ip.txt
Объяснение этого регулярного выражения см. здесь:https://regexr.com/4kjg4
25[0-5] | # 250 - 255
[2][0-4][0-9] | # 200 - 249
[1][0-9]{2} | # 100 - 199
[1-9][0-9] | # 10 - 99
[0-9] | # 0 - 9
Этот ответ основан на комментарии автора ilkkachu и использует zsh
.
process.sh
:#!/bin/sh
set -eu
export script="$(readlink -f "${0}")"
split() {
zsh -c 'printf "%s\0" "${(Q@)${(z)1}}"' "${script}/split" "${@}"
}
process() {
printf '>%s<\n' "${@}"
}
main() {
value_list="${1}"
split "${value_list}" | xargs -0 sh -c 'init() {. "${script}"; } && init && process "${@}"' "${script}/main"
}
[ "${#}" -eq 0 ] || main "${@}"
process()
формы xargs
, немного неудобным, обернутым в функцию для удаления аргументов и предотвращения бесконечного цикла zsh