从bash历史中获取第二个单词

时间:2016-09-22 04:42:41

标签: bash grep history

我试图仅使用 grep从history命令的输出中获取第二个字。到目前为止,我有正则表达式:

[^\d\s](\w+)

相同的输入:

10004 history --help 10005 history -h 10006 man history 10007 history 10008 sort history | uniq -c 10009 history | sort | uniq -c 10010 history | sort 10011 PATH 10012 compgen -c 10013 compgroups 10014 compgroups -a 10015 whence -pm '*' 10016 history | grep -Eo '^[^ ]+'

选择数字后的所有内容,以及第二个单词后面的所有内容(本例中为命令)。

如何根据我的要求对其进行微调?

2 个答案:

答案 0 :(得分:1)

试试这个正则表达式:

\d+\s+([^\s]+)\s+

在这里演示:

Regex101

答案 1 :(得分:1)

尝试

$ history | grep -oP '^\s*\d+\s*\K[^ ]+'

这使用-P选项来使用pcre,因为需要正面的后卫

  • ^\s*\d+\s*\K表示行首处的任何空格,后跟数字和任何空格 - 不是输出的一部分
  • [^ ]+提取空格以外的字符串,因此在提出问题时获得第二个word