¿Cómo puedo eliminar todo el texto después de un carácter, en este caso dos puntos (":"), en bash? ¿Puedo quitar el colon también? No tengo idea de cómo hacerlo.
147
Un ejemplo podría haber sido útil, pero si te entendiera correctamente, esto funcionaría:
echo "Hello: world" | cut -f1 -d":"
Esto convertirá "hola: mundo" en "hola".
cut
funciona, pero la respuesta de Dennis es mejor y más flexible. ¿Alguien sabe si genera un nuevo proceso comocut
?basename
ycut
, vea la respuesta de Dennis a continuacióncut
puede leer desde stdin, por lo que es mejor especialmente cuando tiene una cadena muy larga que necesita procesar, como el contenido de un archivo.hello: world
? Esta es la mitad de una respuesta.En Bash (y ksh, zsh, dash, etc.), puede usar la expansión de parámetros con la
%
que eliminará caracteres del final de la cadena o#
que eliminará caracteres del principio de la cadena. Si usa uno solo de esos caracteres, se eliminará la cadena coincidente más pequeña. Si dobla el personaje, se eliminará el más largo.fuente
hello:world
que sehello:wo
use una cadena específica como${a%:*}
?"${a##*:}"
para obtener solotomorrow
=)a='hello:world:of:tomorrow'; pattern=''^([^:]*:).*$'
; [[$ a = ~ $ patrón]]; echo "$ {BASH_REMATCH [1]}" `. Eso coincide solo si hay dos puntos. Si desea que eso sea opcional, se tendría que usar un patrón diferente. Una explicación de las expresiones regulares de Bash (y las expresiones regulares en general) está más allá del alcance de estos comentarios. Puede encontrar otras preguntas que analicen esto o publique las suyas.fuente
fuente
egrep
es grep con-E
. No hace diferencia aquí de regulargrep
.-o
indica a grep que imprima solo la parte de la línea que coincide con la expresión.^
ancla el partido al inicio de una línea.[^:]*
coincide con cero o más caracteres que no son el:
carácter.:
coincide con el carácter:
.Digamos que tiene una ruta con un archivo en este formato:
Ahora solo desea la ruta que incluye cuatro "/". Tipo
y tu salida será
La ventaja de usar cut es que también puede cortar el directorio superior así como el archivo (en este ejemplo), así que si escribe
su salida sería
Aunque puede hacer lo mismo desde el otro lado de la cadena, en este caso no tendría tanto sentido como escribir
resultados en
En algunos otros casos, el último caso también podría ser útil. Tenga en cuenta que no hay "/" al comienzo de la última salida.
fuente
recortar todo después de la última instancia de ":"
y si quisieras soltar ese último ":"
@ kp123: desea reemplazar
:
con/
(donde debería estar el colon de sed\/
)fuente