El history
comando 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_history
se descarta?Respuestas:
Prueba esto:
fuente
history
comando en lugar de leer el archivo?man cut
. Está eliminando los primeros 7 caracteres de cada línea de salida delhistory
comando. 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]* *//'
cut
sintaxis tiene más sentido :) Gracias @Keith Thompson por su solución que funcionará para> 100k historiales.awk
poder ayudar:Esta respuesta puede fallar si tienes una larga historia.
fuente
substr
es 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
fc
es unbash
incorporado. La única diferencia es que la primera línea es1
, por lo que seríafc -ln 1
Llego tarde en este caso, pero el método más corto sería agregar lo siguiente en su archivo
~/.bashrc
o~/.profile
:HISTTIMEFORMAT="$(echo -e '\r\e[K')"
De bash
manpage
: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' history
Alternativamente, 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,\}
sised
no admite la\+
extensión no estándar .Aunque cortar con la
-c
opció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 $0
es equivalente aprint
, ya que el valor predeterminado es imprimir todo lo que aparece en la línea. Escribirprint $0
es más explícito, pero el que elijas depende de ti. El comportamiento deprint $0
y simplementeprint
cuando se usa con awk es más evidente si usó awk para imprimir un archivo (cat
serí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/stdout
en este caso.fuente
history
El comando no tiene una opción para suprimir los números de línea. Tendrá que combinar varios comandos como todos sugieren:Ejemplo:
fuente
sed
todos 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
cut
para resolverlo:Recorte campos de STDIN o archivos.
Recorte los primeros dieciséis caracteres de cada línea de STDIN:
cut -c 1-16
Recorte los primeros dieciséis caracteres de cada línea de los archivos dados:
cut -c 1-16 file
Recorta 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':' -f5
Recorte los campos segundo y décimo de cada línea, utilizando un punto y coma como delimitador:
cut -d';' -f2,10
Recorte los campos 3 a 7 de cada línea, usando un espacio como delimitador:
cut -d' ' -f3-7
fuente
Sé que llego tarde a la fiesta, pero esto es mucho más fácil de recordar:
fuente