Как правильно проанализировать строку списка arg -в кавычках в сценарии оболочки?

Это регулярное выражение захватывает 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

-1
13.11.2021, 18:54
2 ответа

Этот ответ основан на комментарии автора 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
0
14.11.2021, 06:41

Упрощенный вариант этогоzsh-ответа на основе:

#!/bin/zsh
set -eu

process() {
  printf '>%s<\n' "${@}"
}

main() {
  value_list="${1}"
  process "${(Q@)${(z)value_list}}"
}

main "${@}"
Преимущества
  • Работает
Недостатки
  • Требование к зш
0
14.11.2021, 07:21

Теги

Похожие вопросы