Sed
正則表達式替換camelWords中的單詞
我想替換 camelWords 中的一個單詞,例如:將文本中的“foo”替換為“bar”:
ifootest // not replace this foo Ifootest // not replace this foo IfooTest // << replace this foo I foo Test // << replace this foo I_foo_Test // << replace this foo
或在文本中將“Foo”替換為“Bar”:
IFootest // not replace IFooTest // not replace iFooTest // replace i Foo Test //replace I_Foo_Test // replace
規則是:如果我輸入一個單詞。
單詞第一個字元之前的字元不應與單詞的第一個字元大小寫相同。
單詞最後一個字元之後的字元不應與單詞最後一個字元大小寫相同。
您可以執行以下操作:
perl -pe 's/(?<![[:lower:]])foo(?![[:lower:]])/bar/g'
foo
那就是使用否定的後向和前瞻運算符替換既不在小寫字母之前也不在小寫字母之後的實例。這僅適用於 ASCII 文本。使用您的語言環境的字元集,您可以添加一個
-Mopen=locale
選項。或用於-C
處理 UTF-8 文本。這需要適應像
Foo
//這樣的第一個foO
或FoO
最後一個字元是大寫字母的單詞。要使其適用於任意單詞,您可以執行以下操作:
WORD=FoO REPL=bar perl -pe 's{ (?(?=[[:lower:]]) # if following character is lowercase (?<![[:lower:]])| # preceding must not be lower (?<![[:upper:]]) # otherwise preceding must not be upper ) \Q$ENV{WORD}\E (?(?<=[[:lower:]]) # if preceding character is lowercase (?![[:lower:]])| # following must not be lower (?![[:upper:]]) # otherwise following must not be upper )}{$ENV{REPL}}gx'