我正在尝试替换所有单词" BBB"将文件输入" XXX"但由于某些原因,我似乎无法使[[:space:]]
与换行符匹配:
[root@REDHAT]# cat file
AAA
BBB
BBB
CCC
[root@REDHAT]# sed 's/[[:space:]]BBB/XXX/g' file
AAA
BBB
XXX
CCC
请注意,只有第二个BBB
被替换; [[:space:]]
与第一次出现之前的换行符不匹配。
答案 0 :(得分:0)
正如Sundeep所指出的那样:
sed
默认情况下逐行读取输入。[[:space:]]
唯一可能匹配的是空格或制表符。也许以下命令可以满足您的需求(适用于BSD Sed和GNU Sed):
$ sed -E 's/(^|[[:blank:]])BBB/XXX/' file
AAA
XXX
XXX
CCC
(^|[[:blank:]])
匹配行的开头(^
)或单个制表符或空格字符([[:blank:]]
)。
我已经省略了g
选项,假设每行最多一个 BBB
。