Supongamos que tengo una lista de URL en un archivo de texto:
google.com/funny
unix.stackexchange.com/questions
isuckatunix.com/ireallydo
Quiero eliminar todo lo que viene después de '.com'.
Resultados previstos:
google.com
unix.stackexchange.com
isuckatunix.com
Lo intenté
sed 's/.com*//' file.txt
pero también se eliminó .com
.
text-processing
sed
Koshur
fuente
fuente
.com
solo en lugar de eliminar todo después e incluir el primer/
carácter? ¿Y si tuviera una URL comoen.wikipedia.org/wiki/Ubuntu
en su lista?Respuestas:
Para eliminar explícitamente todo lo que viene después de ".com", simplemente modifique su solución sed existente para reemplazar ".com (cualquier cosa)" con ".com":
Modifiqué tu expresión regular para escapar del primer período; de lo contrario, habría coincidido con algo como "thisiscommon.com/something".
Tenga en cuenta que es posible que desee anclar aún más el patrón ".com" con una barra inclinada hacia adelante para que no recorte accidentalmente algo como "sub.com.domain.com/foo":
fuente
Puede usar
awk
el separador de campo (-F
) de la siguiente manera:Explicación:
Como desea eliminar todas las cosas después
.com
,-F '.com'
separa la línea con.com
yprint $1
da salida solo a la parte anterior.com
. Por lo tanto,$1".com"
agrega.com
y le da salida esperada.fuente
/
como FS y tomar el primer campo?acomercial.com/asdsad
La mejor herramienta para la edición de archivos in situ no interactiva es
ex
.Si ha usado
vi
y si alguna vez ha escrito un comando que comienza con dos puntos:
, ha usado un comando ex. Por supuesto, muchos de los comandos más avanzados o "sofisticados" que puede ejecutar de esta manera son extensiones de Vim (p:bufdo
. Ej. ) Y no están definidos en las especificaciones POSIXex
, pero esas especificaciones permiten un grado realmente sorprendente de potencia y flexibilidad en aplicaciones no visuales. edición de texto (ya sea interactivo o automatizado).El comando anterior tiene varias partes.
-s
habilita el modo silencioso para prepararseex
para el uso por lotes. (Suprimir mensajes de salida et. Al.)-c
especifica el comando que se ejecutará una vez que el archivo (file.txt
en este caso) se abra en un búfer.%
es un especificador de dirección equivalente a:1,$
significa que el siguiente comando se aplica a todas las líneas del búfer.s
es el comando sustituto con el que probablemente ya estés familiarizado. Se usa comúnmentevi
y tiene características esencialmente idénticas als
comando desed
, aunque algunas de las características avanzadas de expresiones regulares pueden variar según la implementación. En este caso, desde ".com" hasta el final de la línea se reemplaza con solo ".com".La barra vertical separa los comandos secuenciales que se ejecutarán. En muchas (la mayoría) de las
ex
implementaciones, también puede usar una-c
opción adicional , como esta:Sin embargo, esto no es requerido por POSIX.
El
x
comando sale, después de escribir cualquier cambio en el archivo. A diferencia de lowq
que significa "escribir y salir",x
solo escribe en el archivo si el búfer ha sido editado. Por lo tanto, si su archivo no se modifica, la marca de tiempo se conservará.fuente
sed
el falso -n de Gnu . Lee / escribe en memorias intermedias en disco. Véalo usted mismo conex -r
elpreserve
comando.preserve
comando?Python muy rápido, simple y sucio:
Ejecución de la muestra
fuente
.com
, solo elimina todo, comenzando por el primero/
de la línea. (¡lo cual es, en mi opinión, incluso el mejor enfoque!).net
, en otros enfoques, la parte que viene después del dominio y la extensión no se eliminaría, por lo que es más seguro usarla/
como separador.