簡體   English   中英

在Linux中使用regex和grep在文件中查找字符串

[英]Finding strings in a file using regex and grep in Linux

我正在嘗試在文件text.txt上找到與grep命令一起使用的正則表達式。

  1. 查找帶有子字符串ad,bd,cd,dd和ed的文本中出現的所有單詞。

  2. 查找所有出現的數字> 100

  3. 查找包含數字0或5的所有出現的數字> 100

我的方法

  1. grep -io '[ae]*d' text

    打印帶有適當子字符串的單詞,但不打印整個字符串/單詞。

     ad d d ed d d ed d d d d ed d d 
  2. grep -io '[199][1-9]*' text

    我相信我離正則表達式還很遙遠,但是它仍然可以打印正確的結果。

     1973 197 17775 
  3. grep -io '[05][1-9]*' text

    這是2的延續,所以我不理解3.中的2.部分,但是我相信我的字符串中包含正確的數字0或5。

     0 0 0 5 

對於(a)部分,grep的-o選項使它打印與模式匹配的行部分,但您的模式與整個單詞不匹配。 您只需要調整樣式以匹配[ae]d子字符串之前和之后的每個單詞的部分。

對於(b)部分,您的模式完全錯誤。 例如,它將與數字299或1000不匹配。 所需的數字模式是19之間的數字,然后是至少09之間的兩個數字。

(c)部分最棘手。 必須含有之間的至少三個數字,第一個是匹配數字模式19 ,與任一5在第一位置或05中的任何其它位置。 您可能需要使用|將其分成其他選擇| 運營商。 看來您可能需要三個條件:前導數字為5 第二位是05的情況,后面一位是05 在第三種情況下,您一定不要忘記,在您所匹配的05兩側可能有任意數量的附加數字,包括零。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM