用於在 Bash 中查找雙字元的正則表達式
我正在尋找一個正則表達式,它可以在命令行(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}'
.