Estou na linha de comando do Linux e tenho um arquivo com
127.0.0.1
128.0.0.0
121.121.33.111
eu quero
127.0.0.1:80
128.0.0.0:80
121.121.33.111:80
Lembro que meus colegas estavam usando o sed para isso, mas depois de ler o manual do sed ainda não está claro como fazer na linha de comando?
Respostas:
Você pode tentar usar algo como:
Desde que o formato do arquivo seja o mesmo que você descreveu na pergunta.
O
s///
comando de substituição corresponde ( localiza ) o final de cada linha em seu arquivo (usando o$
caractere) e, em seguida, anexa ( substitui ) o:80
ao final de cada linha. Oips.txt
arquivo é seu arquivo de entrada ... enew-ips.txt
é seu arquivo recém-criado ( o resultado final de suas alterações ) .Além disso, se você tiver uma lista de números IP que já possuem números de porta anexados, (conforme observado por Vlad e fornecido por aragaer ), você pode tentar usar algo como:
Então, por exemplo, se o seu arquivo de entrada fosse parecido com isto (observe o
:80
) :O resultado final seria mais ou menos assim:
fonte
s///
antes para tirar qualquer número de porta no final de cada linha.sed '/:[0-9]*$/ ! s/$/:80/'
:80
será adicionado ao início da linha seguinte. Usedos2unix
no arquivo primeiro, se necessário.Versão concisa do comando sed :
Explicação:
sed
s tream ed itor-i
i n-place (editar arquivo no local)s
s comando ubstitution/replacement_from_reg_exp/replacement_to_text/
declaração$
corresponde ao final da linha ( replacement_from_reg_exp ):80
texto que você deseja adicionar no final de cada linha ( substituição_to_texto )file.txt
o nome do arquivofonte
fonte
Se você gostaria de adicionar texto no final de cada linha no local (no mesmo arquivo), você pode usar o
-i
parâmetro, por exemplo:No entanto, a
-i
opção é uma extensão Unix não padrão e pode não estar disponível em todos os sistemas operacionais.Portanto, você pode considerar o uso de
ex
(que é equivalente avi -e
/vim -e
):que será adicionado
:80
a cada linha, mas às vezes pode acrescentá-lo a linhas em branco.Portanto, o melhor método é verificar se a linha realmente contém qualquer número e, em seguida, anexá-lo, por exemplo:
Se o arquivo tiver um formato mais complexo, considere o uso de regex adequado, em vez de
[0-9]
.fonte
Usando um editor de texto, verifique
^M
(control-M ou retorno de carro) no final de cada linha. Você precisará removê-los primeiro e, em seguida, acrescentar o texto adicional no final da linha.fonte
Você também pode conseguir isso usando a técnica de referência anterior
Você também pode usar com awk como este
fonte
sed -i 's / $ /, / g' foo.txt
Eu faço isso com bastante frequência para adicionar uma vírgula ao final de uma saída para que eu possa facilmente copiar e colar em um array Python (ou seu idioma favorito)
fonte