sed extrair o primeiro campo e mover para um local específico

3

Eu tenho este arquivo

10.1.1.1    www1           
10.1.1.2    www2           
10.1.1.3    www3            

Eu quero extrair o primeiro campo IP address e movê-lo após o local com http://www.foo.com=10.1.1.1/test.php

10.1.1.1    www1           # http://www.foo.com=10.1.1.1/test.php
10.1.1.2    www2           # http://www.foo.com=10.1.1.2/test.php
10.1.1.3    www3           # http://www.foo.com=10.1.1.3/test.php

Eu posso fazer isso com for loop , mas eu quero fazer isso com sed com truque de liner único.

    
por Satish 16.12.2017 / 20:35

2 respostas

5
sed 's@\([^ ]*\)\(.*\)@ #http://www.foo.com=/test.php@'
  • Eu usei @ como o delimitador para não precisar inverter as barras no endereço.

  • O endereço IP corresponde a [^ ]* , ou seja, não espaço em branco, pelo menos, zero vezes e é capturado por \(\) em . O restante da linha é capturado em por .* , ou seja, qualquer coisa.

por 16.12.2017 / 20:40
4

uma abordagem awk de uma linha: (eu vou deletar se você realmente não quer o awk)

Thanks to RomanPerekhrest for the improvement:

awk '{ $3="# http://www.foo.com="$1"/test.php" }1' $file

Ou se você quiser / precisar manter as guias na sua saída:

awk 'BEGIN{OFS="\t";}{ $3="# http://www.foo.com="$1"/test.php" }1' $file
    
por 16.12.2017 / 20:42