Sed
sed 單詞邊界不適用於冒號字元
我有以下文件
> cat tmp "aaa" "aaa:xyz"
所需的輸出是
"bbb" "aaa:xyz"
我正在使用以下 sed 命令
sed "s/\baaa\b/bbb/" tmp
但是有了這個命令,我得到了
"bbb" "bbb:xyz"
冒號字元似乎被視為單詞邊界。如何在只有第一行而不是第二行更改的情況下獲得所需的輸出?我什至嘗試了以下但沒有效果
sed "s/\Baaa\B/bbb/" tmp sed "s/\baaa\B/bbb/" tmp sed "s/\Baaa\b/bbb/" tmp
編輯:我必須像這樣在同一個文件上使用其他 sed 命令
's/aaa:xyz/ttt/' tmp
所以,只有在沒有冒號的情況下,我才能進行替換。無論行中是否存在冒號,我都應該能夠進行替換
GNU
\b
零寬度單詞邊界模式匹配單詞字元和非單詞字元。“單詞字元”通常是任何字母數字字元和下劃線 (_
)。這意味著它將在字元串\b
之間匹配。aaa``:``aaa:
下面
\b
通過替換所有匹配項來說明範例文件中的匹配\b
項*
:$ sed 's/\b/*/g' file "*aaa*" "*aaa*:*xyz*"
"aaa"
要替換with的所有實例"bbb"
,請使用$ sed 's/"aaa"/"bbb"/g' file "bbb" "aaa:xyz"
用不包含冒號的任何行替換所有單詞:
aaa``bbb
$ sed '/:/!s/\baaa\b/bbb/g' file "bbb" "aaa:xyz"
用 替換所有
aaa
後跟不是冒號的單詞bbb
:$ sed -e 's/\baaa\([^:]\)/bbb\1/g' -e 's/\baaa$/bbb/' file "bbb" "aaa:xyz"
請注意,這裡的第一次替換要求**子字元串
aaa
後跟另一個字元。這意味著子字元串不會在行的最末端被替換。這就是為什麼我們對這種情況進行單獨的替換。aaa