2016-09-22 38 views
0

我試圖從history命令的輸出中使用命令只輸出第二個字 grep。到目前爲止,我有正則表達式:從bash歷史記錄中獲取第二個字

[^\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 '^[^ ]+'

它選擇號碼之後的一切,但也都在第二個字(在這種情況下,命令)之後。

我該如何對此進行微調?

回答

1

試試這個正則表達式:

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

演示在這裏:

Regex101

+0

謝謝!你的選擇數字以及我否定的數字,我有:'[^ \ d + \ s +]([^ \ s] +)'但是regex似乎比regexpal.com中的第二個單詞多。我在這裏錯過了什麼? –

+0

每個正則表達式引擎都不同,儘管這不應該發生。 –

+0

和您的正則表達式演示只顯示第一行中第二個字的選擇。剩餘的輸入沒有匹配。那不是我期待的 –

1

嘗試

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

這使用-P選項,使用pcre爲正回顧後需要

  • ^\s*\d+\s*\K指線開始後跟數字和任何空間的空間 - 而不是輸出的一部分
  • [^ ]+比空間等,從而獲得第二word,你把它的問題
  • 字符提取字符串
+1

我只是用'\ K'鍵入一個答案......你打我:D ... +1 – anishsane

相關問題