[英]Receiving some inaccurate (or no) grep matches for numbers in garbled text
我正在進行一個編碼挑戰,要求我的程序(在Cygwin上用bash編寫)來搜索與亂碼文本中有效IPv4地址的不同表示形式匹配的數字。 我已經解決了很多錯誤,但是在處理一些數字時遇到了一個問題。 當我grep指定一個特定的數字時,我收到的結果是一個較大的數字,這是我不想要的。
說我有以下測試文字:
點分十進制89.229.130.225,無前導零。
點分十六進制0xc0.0x0.0x02.0xeb每個八位字節都單獨轉換為十六進制形式。
點分八進制0300.0000.0002.0353每個八位字節分別轉換為八進制。
點分二進制11000000.00000000.00000010.11101011每個八位位組分別轉換為二進制。
10101010101010101010101010101010Binary11000000000000000000001011101011
030135300000Octal030000001353
Hexadecimal0xC00002EB八進制與點分十六進制的連接。
Decimal3221226219以十進制表示的32位數字。
1.1.1.1.1
我正在嘗試搜索第一個數字為零,第二個數字為[1-7],第三到第12個數字為[0-7]的12位數字。 我最初嘗試了這個grep:
grep -o '0[1-7][0-7]\{10\}'
但這返回了:
010101010101 <-不需要
010101010101 <-不需要
030135300000 <-期望的輸出
030000001353 <-期望的輸出
因為我不想使用另一個數字內的數字,所以我嘗試獲取匹配的內容,該匹配之前或之后只有一個數字:
grep -o '[^0-9]0[1-7][0-7]\{10\}[^0-9]'
但這什么也沒返回!
我也嘗試了其他相關文章中的以下內容:
grep -Eo '(^|[^0-9])0[1-7][0-7]\{10\}($|[^0-9])'
grep -o '[^0-9]?0[1-7][0-7]\{10\}[^0-9]?'
grep -P '(?<!\d)0[1-7][0-7]\{10\}(?!\d)'
沒有一個工作。 什么都沒出來。
我不明白我在做什么錯。 我的正則表達式/推理/文本顯然有問題,但是我不知道這是什么! 任何幫助將不勝感激。
我的grep版本反應有點不同。 我必須將您的第一個grep語句重寫為grep -Eo '0[1-7][0-7]{10}' input
,以實現相同的輸出(4行,2不需要)。
您的改進不適用於行首或行尾的數字。 您也可以查找這些字符,但是結果可以是12、13或14個字符長。 您需要再次對結果進行grep:
grep -Eo '([^0-9]|^)0[1-7][0-7]{10}([^0-9]|$)' input |
grep -Eo '0[1-7][0-7]{10}'
如果您對第二個grep感到滿意,則可以更改方法。
首先尋找數字並檢查結果:
grep -Eo "[0-7]{12}" input | grep -E "^0[1-7][0-7]{10}$"
使用您的grep可能看起來像
grep -o '[0-7]\{12}' input | grep '^0[1-7][0-7]\{10}$`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.