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

.comsolo en lugar de eliminar todo después e incluir el primer/carácter? ¿Y si tuviera una URL comoen.wikipedia.org/wiki/Ubuntuen 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
awkel 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.comyprint $1da salida solo a la parte anterior.com. Por lo tanto,$1".com"agrega.comy le da salida esperada.fuente
/como FS y tomar el primer campo?acomercial.com/asdsadLa mejor herramienta para la edición de archivos in situ no interactiva es
ex.Si ha usado
viy 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.
-shabilita el modo silencioso para prepararseexpara el uso por lotes. (Suprimir mensajes de salida et. Al.)-cespecifica el comando que se ejecutará una vez que el archivo (file.txten 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.ses el comando sustituto con el que probablemente ya estés familiarizado. Se usa comúnmenteviy tiene características esencialmente idénticas alscomando 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
eximplementaciones, también puede usar una-copción adicional , como esta:Sin embargo, esto no es requerido por POSIX.
El
xcomando sale, después de escribir cualquier cambio en el archivo. A diferencia de lowqque significa "escribir y salir",xsolo 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
sedel falso -n de Gnu . Lee / escribe en memorias intermedias en disco. Véalo usted mismo conex -relpreservecomando.preservecomando?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.