簡體   English   中英

sed和grep中單詞的開頭和結尾

[英]Beginning and end of words in sed and grep

我不明白\\b\\<在GNU sed和GNU grep之間的區別。 在我看來\\b總是可以替換\\<\\\\>而不更改匹配字符串的集合。

更具體地說,我試圖找到其中\\bsomething\\\\< something與完全相同的字符串不匹配的示例。

對於something\\bsomething\\\\>相同問題。

謝謝

我懷疑你是否使用(更常見的) \\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.

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