Error de comando de corte: el delimitador debe ser un solo carácter

0

Estoy intentando el siguiente comando en bash-4.3

$history | grep history | xargs cut -d ' ' -f1

pero obtengo el siguiente error del delimitador del que no puedo deshacerme

corte: el delimitador debe ser un solo carácter

Intenté eliminar xargs pero da un resultado en blanco. La idea es obtener un número de comando particular del historial y luego pasarlo al historial -d para eliminar ese comando particular del historial. Aquí está solo la salida de

history | grep history



  498  history | grep history | cat | xargs cut -d " " -f1
  500  history | grep history | cat | xargs awk -ifs " "
  501  history | grep history | xargs cut -d " " -f1
  502  history | grep history | xargs cut -d '0' -f1
  503  history | grep history | xargs cut -d 0 -f1
  504* history | 
  505  history | ack history | xargs cut -d ' ' -f1
  506  history | ack history | xargs cut -d ' ' -f1
  507  history | ack history | cut -d ' ' -f1
  508  history | grep history 
usuario2065276
fuente
1
Pruébalo sin el xargs. Aunque no estoy seguro de lo que este comando debe hacer ...
Stephen Harris
Publicación actualizada de @StephenHarris. Entonces, la idea es obtener un número de comando particular del historial y luego pasarlo al historial -d para eliminar un comando particular del historial
user2065276
Así que probablemente quieras usar awkpara obtener el primer campo. Algo así como history | awk '/command_to_search_for/ { print $1}'. Eso devolverá el número de historial de "command_to_search_for"
Stephen Harris
@StephenHarris Lo que está mal con mi comando. ¿Cómo puedo arreglarlo?
user2065276
1
cut -d' 'se dividirá en espacios ... pero hay múltiples espacios, por -f1lo que probablemente solo devolverá un espacio. awk {print $1}Es más fácil obtener el primer campo. Entonces podría hacerlo, history | grep command_to_search_for | awk '{print $1}' pero eso es más simple escrito con el history | awkcomando que sugerí.
Stephen Harris el

Respuestas:

2

Algunas explicaciones:

  • En realidad, desea el segundo campo, por lo que debe cambiar a `cut -d '' -f 2 '.
  • xargsNo es aplicable aquí. Lo que hace es tomar una entrada estándar y pasarlos como argumentos a un comando. Sin embargo, cutfunciona con entrada estándar de forma predeterminada, que es lo que desea. history | grep history | xargs cut […]termina creando comandos como cut […] [some content from the Bash history]'. Para procesar una serie de números de línea impresos con una nueva línea después de cada uno, querrá usar un while readbucle:

    while IFS=$'\n' read -r -u9 number
    do
        history -d "$number"
    done 9< <(history | grep […] | cut […])
    
  • some_command | cat | other_commandEs completamente redundante. catsimplemente copia su entrada estándar a la salida estándar de forma predeterminada.
l0b0
fuente
0

Prueba este comando

    history | grep history | awk NR==1'{print $8 " " $9 " " $10 " " $11 " " $12 "" $13 }'
xargs cut -d ' '-f1

NR==1: awkleerá las celdas en la primera fila de la tabla, luego imprime las columnas relevantes para "xargs cut -d '' -f1" que son 8-12


fuente
explique la sintaxis y los argumentos de awk. Gracias
user2065276
Lo que está mal con mi comando. ¿Cómo puedo arreglarlo?
user2065276