[英]using Regex and linux commands(grep or egrep?) to find specific strings
注意 :我不確定我的正則表達式是否正確,因為我在學校的教科書並未解釋/教這種形式的正則表達式,而只是解釋了數學形式(例如DFA / NFA)
我將不勝感激任何建議或提示
題:
(a)在文本中找到所有以“ a”開頭並以“ e”結尾的三個字母單詞;
(b)查找文本中所有以“ m”開頭並以“ r”結尾的單詞;
我的方法:
a) ^[a][a-zA-Z][e]$
(如何區分3個字母的單詞和所有單詞?)
b) ^[m][a-zA-Z][r]$
我也想在Linux中使用這些正則表達式,因此以下命令可以工作嗎?:
grep '^[a][a-zA-Z][e]$' 'usr/dir/.../text.txt'
還是我應該以這種方式使用egrep:
find . -text "*.txt" -print0 | xargs -0 egrep '^[a][a-zA-Z][e]$'
您可以為兩個匹配項使用grep -w
和正則表達式的替代項:
grep -w 'a[a-zA-Z]e\|m[a-zA-Z]*r' file.txt
您可以使用邊界\\b
來匹配單詞的開頭和結尾:
a)查找所有以“ a”開頭並以“ e”結尾的三個字母詞的出現;
grep -o '\ba[a-zA-Z]e\b'
圖案字邊界匹配,則隨后的a
,單個字符和以下e
和字邊界。
b)查找文本中所有以“ m”開頭和以“ r”結尾的單詞出現;
grep -o '\bm[a-zA-Z]*r\b'
該模式匹配一個單詞邊界,一個m
零個或多個字符(用*
表示),一個r
和一個單詞邊界。
此外,我使用了-o
選項,它在自己的行上輸出每個匹配項,而不是輸出包含匹配項的整個輸入行。
順便說一句,多虧了-w
選項-僅匹配整個單詞-您甚至可以將上述模式簡化為:
一種)
grep -wo 'a[a-zA-Z]e'
和b)
grep -wo 'm[a-zA-Z]*r'
感謝@anubhava!
您要求提供egrep
。 egrep
不能幫助簡化或優化模式。 grep
絕對沒問題。
首先, egrep
是擴展grep
,它與使用選項-E
調用grep
相同。 其次,在很多情況下,您不需要使用find
和xargs
,因為存在-r
選項,它將在指定路徑內的文件中遞歸搜索。
您的正則表達式適合grep
支持的基本(非擴展)正則表達式語言,因此不需要egrep
。
我將簡化為
grep -r '^a[a-zA-Z]e$' /usr/share/dict/
和這個
grep -r '^m[a-zA-Z]*r$' /usr/share/dict/
在您的示例中,您將只用三個字符匹配全行,匹配您期望的字母。
'^'表示行的開頭
“ $”表示行尾
為了只提取三個字母詞,您必須在某些空格上進行匹配。 例如grep'a [aZ] e''usr / dir /.../ text.txt'
但是,這將丟失行開頭或結尾的三個字母單詞的所有實例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.