Linux

僅包含兩個數字的 Grep 字元串

  • July 18, 2021

我有一個包含字元串的範例文件

GABCDF64V3
HABDDF61WE
KABSDF6WER
HAADYF6WE2

我只需要字元串包含兩個數字的值(字元串中的任何位置),意味著輸出應該是HABDDF61WEHAADYF6WE2

我試過這個表達

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

引用自:https://unix.stackexchange.com/questions/658810