Linux

用於在 Bash 中查找雙字元的正則表達式

  • May 13, 2016

我正在尋找一個正則表達式,它可以在命令行(Bash)上的文本、列表等中找到所有出現的雙字元。

主要問題:是否有一種簡單的方法來查找像aa, ll,ttttt等這樣的序列,其中定義了一個正則表達式來查找相同字元的 n 次出現?我正在尋找的是在非常基礎的層面上實現這一目標。在命令行上。在 Linux Shell 中。

經過相當多的研究,我得出了以下答案——以及由此產生的問題,因此他們只是給了我一個提示,解決方案可能在哪裡。但:

a) (e)grep 和反斜杠問題

  • grep 'a\{2\}'尋找aa
  • egrep'a{2}'尋找aa

問題:設置反沖的必要性真的與我使用的命令有關嗎?如果是這樣,誰能給我提示在此處使用 (e)grep 時還需要考慮什麼?

b)我在這裡找到了我的問題的答案,儘管它不完全是我想要的:

grep -E '(.)\1' filename查找具有多次出現的相同字元的條目,但不詢問頻率。這接近我正在尋找的,但我仍然想設置一些重複。

我可能應該把它分成兩個或更多問題,但是我不想在這裡淹沒這個很棒的網站。

PS:另一個問題,可能是題外話,但是:是in,,還是。是正確的嗎?inside``at``on the shell``on the command line

這確實是兩個問題,應該分開。但是由於答案比較簡單,所以我將它們放在這裡。這些答案grep專門針對 GNU。

a)egrep與 相同grep -E。兩者都表明應該使用“擴展正則表達式”而不是grep預設的正則表達式。 grep普通正則表達式需要反斜杠。

man頁面:

基本與擴展正則表達式

在基本正則表達式中,元字元**?** , + , { , | , ( , 和**)失去了它們的特殊意義;而是使用反斜杠版本?** , + , { , |()

有關歷史慣例和可移植性的更多詳細資訊,請參閱該man頁面。

b)使用egrep '(.)\1{N}'並替換N為您希望替換的字元數減一(因為點與第一個匹配)。因此,如果要匹配重複四次的字元,請使用egrep '(.)\1{3}'.

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