Я хочу получить всю строку IP и PORT со следующей строки и имя оракула sid - PullRequest
0 голосов
/ 29 марта 2019
@(description=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=211.67.48.11)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=211.67.48.12)(PORT=1521)))(FAILOVER=yes)(LOAD_BALANCE=yes)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = YWKDB)))"

выше - это oracle connect str, я хочу использовать grep, sed или awk для получения всей информации IP и PORT, например, 211.67.48.11:1521,211.67.48.12:1521 и sidname: YWKDB

str находится в TOMCAT_HOME / conf / context.xml, мне нужно получить информацию об IP.

1 Ответ

1 голос
/ 29 марта 2019

Комментарии в коде.

# The input. Sorry cat. 
cat <<'EOF' |
@(description=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=211.67.48.11)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=211.67.48.12)(PORT=1521)))(FAILOVER=yes)(LOAD_BALANCE=yes)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = YWKDB)))
EOF
{
        # substitute `(` for newlines
        tr '(' '\n' |
        # substitue `)` for newlines
        tr ')' '\n' |
        # now that we have all in newlines, we can filter HOST and PORT lines
        grep 'HOST\|PORT' |
        # remove the HOST and PORT part before `=`
        sed 's/[^=]*=//' |
        # read two lines at a time
        while read host && read port; do
            # some output
            echo "HOST=$host PORT=$port"
        done
}

выведет:

HOST=211.67.48.11 PORT=1521
HOST=211.67.48.12 PORT=1521
...