Linux
僅包含兩個數字的 Grep 字元串
我有一個包含字元串的範例文件
GABCDF64V3 HABDDF61WE KABSDF6WER HAADYF6WE2
我只需要字元串包含兩個數字的值(字元串中的任何位置),意味著輸出應該是HABDDF61WE和HAADYF6WE2。
我試過這個表達
grep -E '.*[0-9]{1,}.*[0-9]{1,}.*'
但是輸出不一樣
要在 grep 中執行此操作,您需要整行包含零個或多個非數字,後跟一個數字,後跟零個或多個非數字,後跟一個數字,並以零個或多個非數字結束-數字。所以例如
$ grep -x '[^0-9]*[0-9][^0-9]*[0-9][^0-9]*' file HABDDF61WE HAADYF6WE2
(僅限拉丁十進制數字)或
$ grep -Px '\D*\d\D*\d\D*' file HABDDF61WE HAADYF6WE2
如果您的 grep 實現不提供
-x
/--line-regexp
選項,您可以使用^
和$
線錨:$ grep '^[^0-9]*[0-9][^0-9]*[0-9][^0-9]*$' file HABDDF61WE HAADYF6WE2
awk
或者,您可能會發現整個事情在ex之類的東西中更簡單。$ awk 'gsub(/[[:digit:]]/,"&") == 2' file HABDDF61WE HAADYF6WE2
(
gsub
返回替換的數量)。你可以用 Perl 做類似的事情tr
。