[英]Beginning and end of words in sed and grep
我不明白\\b
和\\<
在GNU sed和GNU grep之間的區別。 在我看來\\b
總是可以替換\\<
和\\\\>
而不更改匹配字符串的集合。
更具體地說,我試圖找到其中\\bsomething
和\\\\< something
與完全相同的字符串不匹配的示例。
對於something\\b
和something\\\\>
相同問題。
謝謝
我懷疑你是否使用(更常見的) \\b
或(更具體的) \\<
和\\>
,它很少有所作為,但我可以想到一個例子。 這是非常人為的,我懷疑在大多數現實世界的正則表達式中使用它並沒有什么區別,但這應該證明它至少可以在某些情況下產生影響。
如果我有以下文字:
this is his pig
我想知道如果/\\bis\\b/
匹配,如果我改為使用/\\<is\\>/
或者我改為使用/\\>is\\</
但是,如果我的文字是相反的
is this his pig
在'是'之前不再有單詞最終邊界,只有單詞初始邊界。 使用/\\bis\\b/
匹配,當然/\\<is\\>/
也可以,但/\\>is\\</
不。
但是在現實生活中,我認為你真的需要能夠做出這種區分並不常見,這就是為什么(至少在sed之外) \\b
是正則表達式的正常單詞邊界標記。
\\<
匹配從非單詞到單詞的過渡。
\\>
匹配從單詞到非單詞的過渡。
\\b
等效於擴展正則表達式中的(\\<|\\>)
。
所以我不會說\\b
和\\<
是一樣的。 我會說\\b
是\\<
的超集。 反之亦然\\b
和\\>
。
我早先偶然發現了這樣一個例子。
\\ <。\\>匹配單個字母的單詞。
使用\\ b你需要輸入類似\\ b [^] \\ b的東西,因為\\ b。\\ b匹配兩個單詞之間的空格。
根據LinuxTopia ,兩種類型的單詞邊界之間的唯一區別是,雖然\\<
和\\>
在大多數sed版本中工作; 后者\\b
僅在您的系統使用gsed時有效
來自維基的引文:
這些符號包括'\\ <'和'>'(gsed,ssed,sed15,sed16,sedmod)和'\\ b'和'\\ B'(僅限gsed)。
除此之外,兩者是相同的。 此處還有一個表格,解釋了使用單詞邊界的所有可能方案:
Match position Possible word boundaries HHsed GNU sed
---------------------------------------------------------------
start of word [nonword char]^[word char] \< \< or \b
end of word [word char]^[nonword char] \> \> or \b
middle of word [word char]^[word char] none \B
outside of word [nonword char]^[nonword char] none \B
---------------------------------------------------------------
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.