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

时间:2017-04-05 15:37:41

标签: 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:]]与第一次出现之前的换行符不匹配。

1 个答案:

答案 0 :(得分:0)

正如Sundeep所指出的那样:

  • sed默认情况下逐行读取输入。
  • 读取的每一行都不包含尾随换行符,
    • 所以[[:space:]]唯一可能匹配的是空格或制表符。

也许以下命令可以满足您的需求(适用于BSD Sed和GNU Sed):

$ sed -E 's/(^|[[:blank:]])BBB/XXX/' file
AAA
XXX
XXX
CCC
  • (^|[[:blank:]])匹配行的开头(^)或单个制表符或空格字符([[:blank:]])。

  • 我已经省略了g选项,假设每行最多一个 BBB