как захватить IP-адрес из информации

Вы можете просто проверить количество аргументов и обработать их в обратном порядке, например для простого случая с двумя аргументами, где аргумент первый является необязательным:

usage() {
  cat << EOF
Usage: $0 [host] port
EOF
}

[ "$#" -eq 0 ] && { usage; exit 1;}

if [ "$#" -gt 1 ]; then
  myhost="$1"
  shift
fi

myport="$1"

Однако вы также упоминаете идею трех аргументов. На самом деле нетривиально иметь три необязательных аргумента, определяемых позицией - что, если вы хотите указать первый и третий, но не второй? Такие сценарии практически невозможно обработать с помощью одних только позиционных параметров, но они очень просты при правильном использовании getopts .

usage() {
  cat << EOF
usage: $0 [OPTIONS]

    -p    port number (required)
    -h    hostname (optional)
EOF
}

while getopts :p:h: opt; do
  case "$opt" in
    p)
      myport="$OPTARG"
      ;;
    h)
      myhost="$OPTARG"
      ;;
    :)
      printf %s\\n "Argument required for option -$OPTARG" >&2
      usage >&2
      exit 1
      ;;
    \?)
      printf %s\\n "Unknown option -$OPTARG" >&2
      usage >&2
      exit 1
      ;;
  esac
done
shift "$((OPTIND-1))"

if [ -z "$myport" ]; then
  printf %s\\n "You must supply a port" >&2
  usage >&2
  exit 1
fi
0
07.05.2019, 16:07
4 ответа

Вы можете сделать это, просто используя awkфункции обработки строк

awk -F'/[/]?' '$NF ~ /^(master1|master3).*/{ n=split($2,arr,":"); print arr[1] }'
2
28.01.2020, 02:30

с помощью grep:

  grep 'master[1,3]' | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}"
0
28.01.2020, 02:30

Выполнено с помощью команды sed, все работает нормально

команда

 sed -e "s/.*\:\///g" -e "s/:.*//g" -e "s/\///g" filename

выход

192.23.39.2
192.23.39.2
0
28.01.2020, 02:30

Сделано также с помощью Python

import re
p=re.compile(r'[0-9]*\.[0-9]*\.[0-9]*')
k=open('filename','r')
for i in k:
    h=re.search(p,i)
    print h.group()

выход

192.23.39
192.23.39
0
28.01.2020, 02:30

Теги

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