我正在尝试将文件中的所有单词"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:]]
与第一次出现之前的换行符不匹配。
正如Sundeep指出的那样:
- 默认情况下,
sed
逐行读取其输入。 - 读取的每一行不包括尾随换行符,
- 因此,
[[:space:]]
唯一可能匹配的是空格或制表符字符。
- 因此,
也许下面的命令可以满足你的要求(适用于BSD Sed和GNU Sed(:
$ sed -E 's/(^|[[:blank:]])BBB/XXX/' file
AAA
XXX
XXX
CCC
(^|[[:blank:]])
匹配行首 (^
( 或单个制表符或空格字符 ([[:blank:]]
(。我省略了
g
选项,假设每行最多有一个BBB
。