Linux

使用 grep、管道和 cat 輸出混合字母數字輸入

  • August 24, 2019

我有一個混合詞表作為輸入:

azert12345
a1z2e3r4t5
a1z2e3r455

我嘗試執行的命令行:

cat file.txt | grep -E "[[:digit:]]{5}" --color

我想完成什麼:

只列印這些詞:“azert12345”和“a1z2e3r4t5”,使用grep我之前說的模式。類似的東西grep -E "[[:digit:]]{5}"

grep -E "[[:alpha:]]{5}[[:digit:]]{5}"使用最大位數為 5 和最大字母字元數為 5來列印諸如“azert12345”之類的單詞很容易,但問題是:我將如何列印像這樣的混合單詞 a1z2e3r4t5?

“a1z2e3r4t5”只是一個例子,我應該處理的數據量要大得多

這個問題讓我發瘋了3天,這不是功課。我將再次開始學習更多關於 linux 命令的知識。我需要幫助。

恕我直言,這在 awk 或 perl 中會更簡單,原因如下:帶有邏輯運算符的 grep(特別是 grep 中沒有自然AND運算符)。例如

awk 'gsub(/[a-z]/,"&") == 5 && gsub(/[0-9]/,"&") == 5' file

或者

perl -ne 'print if tr/[a-z]// == 5 && tr/[0-9]// == 5' file

將列印正好包含每個字元集 5 個的行。


如果你堅持使用 grep,那麼這樣的事情可能會起作用:

grep -xE '([^a-z]*[a-z][^a-z]*){5}' file | grep -xE '([^0-9]*[0-9][^0-9]*){5}'

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