[英]Finding strings in a file using regex and grep in Linux
我正在嘗試在文件text.txt
上找到與grep命令一起使用的正則表達式。
題
查找帶有子字符串ad,bd,cd,dd和ed的文本中出現的所有單詞。
查找所有出現的數字> 100
查找包含數字0或5的所有出現的數字> 100
我的方法
grep -io '[ae]*d' text
打印帶有適當子字符串的單詞,但不打印整個字符串/單詞。
ad d d ed d d ed d d d d ed d d
grep -io '[199][1-9]*' text
我相信我離正則表達式還很遙遠,但是它仍然可以打印正確的結果。
1973 197 17775
grep -io '[05][1-9]*' text
這是2的延續,所以我不理解3.中的2.部分,但是我相信我的字符串中包含正確的數字0或5。
0 0 0 5
對於(a)部分,grep的-o
選項使它僅打印與模式匹配的行部分,但您的模式與整個單詞不匹配。 您只需要調整樣式以匹配[ae]d
子字符串之前和之后的每個單詞的部分。
對於(b)部分,您的模式完全錯誤。 例如,它將與數字299或1000不匹配。 所需的數字模式是1
到9
之間的數字,然后是至少0
到9
之間的兩個數字。
(c)部分最棘手。 必須含有之間的至少三個數字,第一個是匹配數字模式1
和9
,與任一5
在第一位置或0
或5
中的任何其它位置。 您可能需要使用|
將其分成其他選擇|
運營商。 看來您可能需要三個條件:前導數字為5
; 第二位是0
或5
的情況,后面一位是0
或5
。 在第三種情況下,您一定不要忘記,在您所匹配的0
或5
兩側可能有任意數量的附加數字,包括零。
A)查找帶有子字符串ad,bd,cd,dd和ed的文本中所有出現的單詞。
grep -ow '.*\(a\|b\|c\|d\|e\)d.*' text
要么
egrep -ow '.*(a|b|c|d|e)d.*' text
B)查找所有出現的數字> 100
grep -ow '[1-9][0-9][0-9]\+' text
C)查找所有包含數字0或5的大於100的數字
grep -ow '[1-9][0-9][0-9]\+' text | grep '\(0\|5\)'
要么
grep -ow '[1-9][0-9][0-9]\+' text | egrep '(0|5)'
我正在使用-o
選項在其自己的行而不是在找到模式的整行上輸出每個匹配項,而-w
選項則指定在匹配之前和之后應該是單詞邊界。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.