Você pode usar o awk:
awk -F\/ '{print $2"="$3, $4"="$5}' input_file
com um arquivo de entrada ou apenas linha por linha.
Eu tenho uma string como
/ip/192.168.0.1/port/8080/
Eu quero pegar duas variáveis separadas que conterão porta e IP
como. 192.168.0.1
e 8080
como eu sei / ip / e / port / vai estar lá sempre eu tenho Ip da seguinte forma,
expr /ip/192.168.0.1/port/8080/ : '/ip/\(.*\)/port/'
isto produzirá 192.168.0.1
só não sei como conseguir porta,
Eu tentei comando semelhante como,
expr /ip/192.168.0.1/port/8080/ : '/port/\(.*\)/'
mas não dá porta .. como conseguir porta também.
Você pode simplesmente usar cut
da seguinte forma:
cut -d '/' -f 3,5
Exemplo:
$ echo '/ip/192.168.0.1/port/8080/' | cut -d '/' -f 3,5
192.168.0.1/8080
Isso cortará com o delimitador /
e imprime os campos 3 e 5.
Ou a seguir, você pode querer:
$ echo ip='cut -d '/' -f 3 input_file' port='cut -d '/' -f 5 input_file'
ip=192.168.0.1 port=8080
Outro caminho bash puro usando matrizes:
$ s="/ip/192.168.0.1/port/8080/" # initial string
$ a=(${s//// }) # substitute / with " " and make array
$ echo ${a[1]} # Array index 1 (zero-based indexing)
192.168.0.1
$ echo ${a[3]} # Array index 3 (zero-based indexing)
8080
$
Ou semelhante ao acima, mas usando o IFS em vez da expansão de parâmetro para dividir a string:
$ OLDIFS="$IFS" # save IFS
$ IFS="/" # temporarily set IFS
$ a=($s) # make array from string, splitting on "/"
$ IFS="$OLDIFS" # restore IFS
$ echo "${a[2]}" # Array index 2
192.168.0.1
$ echo "${a[4]}" # Array index 4
8080
$
Observe que esse método é potencialmente mais geral do que os outros dois nesta resposta, pois ainda deve funcionar se os campos de interesse contiverem espaço em branco.
Ou usando parâmetros posicionais:
$ s="/ip/192.168.0.1/port/8080/" # initial string
$ set -- ${s//// } # substitute / with " " and assign params
$ echo $2 # Param 2
192.168.0.1
$ echo $4 # Param 4
8080
$
expr /ip/192.168.0.1/port/8080/ : '.*/port/\(.*\)/'
.*
corresponde à parte inicial da string antes de /port
com bash
s=/ip/192.168.0.1/port/8080/
IFS=/ read -r _ _ ip _ port <<<"$s"
echo "$ip"
192.168.0.1
echo "$port"
8080
Esta é outra maneira
$ cut -d '/' -f 3,5 <<< "/ip/192.168.0.1/port/8080/"|tr -s '/' ' '
192.168.0.1 8080
Tags shell shell-script string