como alterar o último valor (endereço ip) com sed

0

Eu li o endereço IP atual com a seguinte linha de comando. depois eu preciso substituir o último valor com 0/24 Por exemplo. O ip atual é 192.168.178.1 e eu preciso substituir o valor var em 192.168.178.0/24

Obrigado pelo seu apoio e melhores saudações!

 varip=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1  -d'/' )
    
por mikeeyy 09.10.2017 / 21:32

5 respostas

1

Use o seguinte código sed no final:

sed 's:[^.]*$:0/24:'

Funciona substituindo a última string secundária que não contém '.', com '0/24'. Note como eu uso ':' como separador para o comando sed s , para que eu possa usar '/' un-escaped.

Ou vá com sed todo o caminho:)

ip addr | sed -rn '/state UP/{n;n;s:^ *[^ ]* *([^ ]*).*::;s:[^.]*$:0/24:p}'
    
por 09.10.2017 / 21:49
1

Tente isto :

ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1  -d'/' | sed 's/\.[0-9]*$/\.0\/24/'

Mas você não precisa de cut , substitua-o por sed :

ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | sed 's/\.[0-9]*\//\.0\//'

Este comando retorna a mesma saída.

E você não precisa de tail , substitua-o por sed também:

ip addr | grep 'state UP' -A2 | awk '{print $2}' | sed '$!d;s/\.[0-9]*\//\.0\//'

Mas o caminho mais curto é usar hostname :

hostname -I | tr -d " " | sed 's/[0-9]*$/0\/24/'

A saída será a mesma.

    
por 09.10.2017 / 21:46
0

Para obter o seu endereço IP / 24, use o seguinte comando:

ip addr | grep inet | egrep /24 | awk '{print $2}'
    
por 09.10.2017 / 22:07
0

Aqui está um marcador perl one:

perl -MSys::Hostname -MEnv -e ' print join ".",( unpack("C4",(gethostbyname($HOSTNAME))[4]))[0..2],"0/24\n";'

É predicado na variável de ambiente HOSTNAME sendo configurada para o nome da máquina apropriada.

    
por 09.10.2017 / 21:49
0

Apenas usando o Awk:

ip a | awk '/state UP/{nr[NR+2]}; NR in nr {gsub(/\.([0-9]+)\/([0-9]+)/,".0/24"); print $2}'
    
por 10.10.2017 / 01:36