1.在檔案numbers.txt中搜索包含6個連續數字,后面緊接著字符"."的所有行
[liuqiang@mu01 grepTest]$ cat numbers.txt
123214.
0987654 456789.678 9 192
1234567.
222111. 21.
[liuqiang@mu01 grepTest]$ grep '[0-9]\{6\}\.' numbers.txt //方法1
123214.
0987654 456789.678 9 192
1234567.
222111. 21.
[liuqiang@mu01 grepTest]$grep '^[0-9]\{6\}\.' numbers.txt //方法2
123214.
222111. 21.
[liuqiang@mu01 grepTest]$ grep '\<[0-9]\{6\}\.' numbers.txt //方法3
123214.
0987654 456789.678 9 192
222111. 21.
[liuqiang@mu01 grepTest]$ grep '\<[0-9]\{6\}\.\>' numbers.txt //方法4
[liuqiang@mu01 grepTest]$
以上,請教幾個問題哈:
1. 方法2中^[XXX]的這種形式,指的是加了^之后,就必須滿足完整匹配,即剛好6個數字才行的字串,所以456789.678 這行是不行。
2. 方法3中使用字串限定的方式,并沒有考慮結尾,因此456789.678 被選中。
3. 傳統的方法是方法1,但是方法1顯然只是考慮包含的關系,因此1234567. 明明是7個數字,也被選中。
4. 為什么方法4的執行結果為空?
以上4個問題,前面3個不知道我的理解對不對,第四個我還是不明白,懇請大神指點下。
非常感謝!
uj5u.com熱心網友回復:
1. 方法2中的"^"的含義是以什么為開頭,你的^后面跟的是[0-9]所以只會匹配以數字開頭的,隨后看下一個條件,{6}至少匹配[0-9]六次。所以除了第一行和最后一行滿足條件,其余的都不滿足不滿足的原因:
第二行滿足以數字開頭,但不滿足匹配六次,所以忽略。
第三行滿足以數字開頭,但不滿足匹配六次,所以忽略。
2. 第二行之所以會匹配到456789.678是以為你使用了鉚釘行首"\<",但沒有鉚釘行位,所以全部匹配。
別的我也不太確定,以上均為個人見解。
uj5u.com熱心網友回復:
1、^是行首定位符,表示以6個數字 加 一個 . 開頭的2、方法三,你匹配的是 詞首 是6個數字加一個. 的,不管這個單詞后面還有沒有,所以那幾個都會匹配
3、你沒有加其他限定條件,grep會按字符順序依次匹配,例如方法1 1234567. 它先從1開始,發現前面6個數字能匹配上,但是第7個字符不是點,然后又從2開始匹配,發現符合條件,所以就匹配上了
4、方法4,我也不太懂,你加上了詞首定位符合詞尾定位符,按理說應該是連續字符為一個詞,但是這里好像把 點 排除在單詞之外了。可能我解錯了吧,這個不太明白。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/83601.html
標籤:系統維護與使用區
上一篇:電腦開機出現EaseUS partition master boot mode一直回圈怎么辦
下一篇:大神們幫我看一下哪里錯了
