El historycomando bash es muy bueno. Entiendo por qué muestra los números de línea, pero ¿hay alguna forma de invocar el comando de historial y suprimir los números de línea?
El punto aquí es usar el comando de historial, así que no responda cat ~/.bash_history
Salida de corriente:
529 man history
530 ls
531 ll
532 clear
533 cd ~
534 history
Salida deseada:
man history
ls
ll
clear
cd ~
history
Gracias a todos por sus excelentes soluciones. Paul's es el más simple y funcionará para mí porque el tamaño de mi historial de bash está establecido en 2000.
También quería compartir un artículo genial que encontré esta mañana. Tiene un par de buenas opciones que ahora estoy usando, como mantener las entradas duplicadas fuera del historial de bash y asegurarme de que varias sesiones de bash no sobrescriban el archivo de historial: http://blog.macromates.com/2008/working-with -history-in-bash /

cat ~/.bash_historyse descarta?Respuestas:
Prueba esto:
fuente
historycomando en lugar de leer el archivo?man cut. Está eliminando los primeros 7 caracteres de cada línea de salida delhistorycomando. Solo debería tener problemas si el número supera los 99,999, algo que nunca he visto (y uso mucho los shells ). Pero si le preocupa eso:history | sed 's/^ *[0-9]* *//'cutsintaxis tiene más sentido :) Gracias @Keith Thompson por su solución que funcionará para> 100k historiales.awkpoder ayudar:Esta respuesta puede fallar si tienes una larga historia.
fuente
substres mucho más simple, lo he estado usandohistory | awk '{for (i=2;i<=NF;i++) printf("%s ", $i);print("\r")}'para el mío!Soy bastante consciente de que esta pregunta es para bash y muchas personas preferirían no cambiar a zsh (cue downvotes ...)
Sin embargo, si estaba dispuesto a cambiar a zsh, entonces zsh lo admite de forma nativa (así como otras opciones para formatear el historial)
(Ver /server/114988/removing-history-or-line-numbers-from-zsh-history-file )
fuente
fces unbashincorporado. La única diferencia es que la primera línea es1, por lo que seríafc -ln 1Llego tarde en este caso, pero el método más corto sería agregar lo siguiente en su archivo
~/.bashrco~/.profile:HISTTIMEFORMAT="$(echo -e '\r\e[K')"De bash
manpage:HISTTIMEFORMAT Si esta variable se establece y no es nula, su valor se utiliza como formatear cadena para strftime (3) para imprimir la marca de tiempo asociada con cada entrada del historial mostrada por el historial incorporado. Si esta variable está configurada, las marcas de tiempo se escriben en el historial archivo para que puedan conservarse en las sesiones de shell. Esto usa el carácter de comentario histórico para distinguir las marcas de tiempo de Otras líneas de la historia.Usando esta capacidad, un truco inteligente consiste en hacer que la variable "imprimir" sea un retorno de carro (
\r) y borrar la línea (código ANSIK) en lugar de una marca de tiempo real.fuente
HISTTIMEFORMAT=$'\r\e[K'HISTTIMEFORMAT=$'\r\e[K' historyAlternativamente, podría usar sed:
Usando alias, puede establecer esto como su estándar (pegarlo en su bash_profile):
fuente
\+en una expresión regular básica no es POSIX conforme. Úselo\{1,\}sisedno admite la\+extensión no estándar .Aunque cortar con la
-copción funciona para la mayoría de los propósitos prácticos, creo que el historial de tuberías a awk sería una mejor solución. Por ejemplo:O
Ambas soluciones hacen lo mismo. La salida de la historia se está enviando a awk. Awk luego deja en blanco la primera columna, que corresponde a los números en la salida del comando de historial. Aquí awk es más conveniente porque no tiene que preocuparse por la cantidad de caracteres en la parte numérica de la salida.
print $0es equivalente aprint, ya que el valor predeterminado es imprimir todo lo que aparece en la línea. Escribirprint $0es más explícito, pero el que elijas depende de ti. El comportamiento deprint $0y simplementeprintcuando se usa con awk es más evidente si usó awk para imprimir un archivo (catsería más rápido escribir en lugar de awk, pero esto es para ilustrar un punto).[Ej] Usando awk para mostrar el contenido de un archivo con $ 0
[Ex] Usar awk para mostrar el contenido de un archivo sin $ 0 explícito
[Ex] Usar awk cuando la línea del historial abarca varias líneas
fuente
De salida de
history --help:Escribe el historial actual en el archivo especificado,
/dev/stdouten este caso.fuente
historyEl comando no tiene una opción para suprimir los números de línea. Tendrá que combinar varios comandos como todos sugieren:Ejemplo:
fuente
sedtodos modos, entonces el corte inicial es redundante, simplemente agréguelo a la expresión.Es posible que desee probar https://github.com/dvorka/hstr que permite el filtrado de "estilo de cuadro de sugerencia" del historial de Bash con un orden basado en métricas (opcional), es decir, es mucho más eficiente y más rápido tanto en dirección hacia adelante como hacia atrás:
Se puede unir fácilmente Ctrl-ry / oCtrl-s
fuente
Puede usar el comando
cutpara resolverlo:Recorte campos de STDIN o archivos.
Recorte los primeros dieciséis caracteres de cada línea de STDIN:
cut -c 1-16Recorte los primeros dieciséis caracteres de cada línea de los archivos dados:
cut -c 1-16 fileRecorta todo, desde el tercer personaje hasta el final de cada línea:
cut -c3-Recorte el quinto campo de cada línea, utilizando dos puntos como delimitador de campo (el delimitador predeterminado es tab):
cut -d':' -f5Recorte los campos segundo y décimo de cada línea, utilizando un punto y coma como delimitador:
cut -d';' -f2,10Recorte los campos 3 a 7 de cada línea, usando un espacio como delimitador:
cut -d' ' -f3-7fuente
Sé que llego tarde a la fiesta, pero esto es mucho más fácil de recordar:
fuente