我正在 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==1
:awk
将读取表格第一行中的单元格,然后打印与“xargs cut -d ' '-f1”相关的列,即 8-12