Estoy en la línea de comandos de Linux y tengo un archivo con
127.0.0.1
128.0.0.0
121.121.33.111
yo quiero
127.0.0.1:80
128.0.0.0:80
121.121.33.111:80
Recuerdo que mis colegas estaban usando sed para eso, pero después de leer el manual de sed todavía no está claro cómo hacerlo en la línea de comandos.
Respuestas:
Puedes intentar usar algo como:
Siempre que su formato de archivo sea el que ha descrito en su pregunta.
El
s///
comando de sustitución coincide ( encuentra ) el final de cada línea en su archivo (usando el$
carácter) y luego agrega ( reemplaza ) el:80
al final de cada línea. Elips.txt
archivo es su archivo de entrada ... ynew-ips.txt
es su archivo recién creado ( el resultado final de sus cambios ) .Además, si tiene una lista de números de IP que ya tienen números de puerto adjuntos (como lo señaló Vlad y lo proporcionó aragaer ), podría intentar usar algo como:
Entonces, por ejemplo, si su archivo de entrada se veía así (tenga en cuenta
:80
) :El resultado final se vería así:
fuente
sed '/:[0-9]*$/ ! s/$/:80/'
:80
se agregará al principio de la siguiente línea. Usedos2unix
primero en el archivo si es necesario.-n
necesario? probablemente no para la mayoría de los usuarios.Versión concisa del comando sed :
Explicación:
sed
s tream ed Itor-i
i n-place (editar archivo en su lugar)s
s comando ubstitution/replacement_from_reg_exp/replacement_to_text/
declaración$
coincide con el final de la línea ( replacement_from_reg_exp ):80
texto que desea agregar al final de cada línea ( reemplazo_a_texto )file.txt
el nombre del archivofuente
fuente
Si desea agregar texto al final de cada línea en el lugar (en el mismo archivo), puede usar el
-i
parámetro, por ejemplo:Sin embargo, la
-i
opción es una extensión Unix no estándar y puede que no esté disponible en todos los sistemas operativos.Entonces puede considerar usar
ex
(que es equivalente avi -e
/vim -e
):que se agregará
:80
a cada línea, pero a veces puede agregarlo a líneas en blanco.Entonces, un mejor método es verificar si la línea realmente contiene algún número y luego agregarlo, por ejemplo:
Si el archivo tiene un formato más complejo, considere usar expresiones regulares adecuadas, en lugar de
[0-9]
.fuente
Con un editor de texto, busque
^M
(control-M o retorno de carro) al final de cada línea. Primero deberá eliminarlos y luego agregar el texto adicional al final de la línea.fuente
También puede lograr esto utilizando la técnica de referencia inversa.
También puedes usar con awk como este
fuente
sed -i 's / $ /, / g' foo.txt
Hago esto con bastante frecuencia para agregar una coma al final de una salida para poder copiarla y pegarla fácilmente en una matriz de Python (o su idioma favorito)
fuente