[[:空格:]] 与 sed 中的换行符不匹配



我正在尝试将文件中的所有单词"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

最新更新