剪切命令错误:分隔符必须是单个字符

剪切命令错误:分隔符必须是单个字符

我正在 bash-4.3 上尝试以下命令

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

但我收到以下分隔符错误,我无法摆脱

cut:分隔符必须是单个字符

我尝试删除 xargs 但它给出了空白输出。整个想法是得到A从历史记录中提取特定的命令编号,然后将其传递给history -d 进行删除来自历史的特定命令。这只是输出

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 

答案1

一些解释:

  • 你实际上想要的是第二字段,因此您需要更改为 `cut -d ' ' -f 2'。
  • xargs在这里不适用。它的作用是获取标准输入并将其传递为论点到一个命令。但是,cut默认情况下在标准输入上运行,这正是您想要的。history | grep history | xargs cut […]最终创建像cut […] [some content from the Bash history]'.要处理一系列在每个行后打印有换行符的行号,您需要使用循环while read

    while IFS=$'\n' read -r -u9 number
    do
        history -d "$number"
    done 9< <(history | grep […] | cut […])
    
  • some_command | cat | other_command是完全多余的。cat默认情况下,只需将其标准输入复制到标准输出。

答案2

试试这个命令

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

NR==1awk将读取表格第一行中的单元格,然后打印与“xargs cut -d ' '-f1”相关的列,即 8-12

相关内容