我有以下文件
> 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
所以,只有在没有冒号的情况下,我才能进行替换。无论行中是否存在冒号,我都应该能够进行替换
如果不匹配
:
用 bbb 替换 aaa:使用 perl:
使用 sed:
输出:
GNU
\b
零宽度单词边界模式匹配单词字符和非单词字符。“单词字符”通常是任何字母数字字符和下划线 (_
)。这意味着它将在字符串\b
之间匹配。aaa
:
aaa:
下面
\b
通过替换所有匹配项来说明示例文档中的匹配\b
项*
:"aaa"
要替换with的所有实例"bbb"
,请使用用不包含冒号的任何行替换所有单词:
aaa
bbb
用 替换所有
aaa
后跟不是冒号的单词bbb
:请注意,这里的第一次替换要求子字符串
aaa
后跟另一个字符。这意味着子字符串不会在行的最末端被替换。这就是为什么我们对这种情况进行单独的替换。aaa