sed 模式匹配与删除一行

sed 模式匹配与删除一行

我只想删除后面的一些空格(比如 4 个)line$#*425 with space

我无法完成它,请提出建议

echo "line$#*425 with space          " | sed 's/ /\1 \2/g'

我也在考虑使用od -b但仍然无法弄清楚

我该怎么做

笔记:spaces 可以是普通的 " " 或制表符

编辑:这就是我如何进行测试来检查以下答案

[root@testgfs2 test]$echo -e "line$#*425 with space \t     "  | sed 's/[[:blank:]]\{4\}$//' | od -b
0000000 154 151 156 145 060 052 064 062 065 040 167 151 164 150 040 163
0000020 160 141 143 145 040 011 040 012
0000030

删除不是发生在空格词之后,而是发生在行尾。制表符(011)还在那里

答案1

您的代码示例似乎与您的问题不符。您的代码示例没有分组,因此\1不要\2引用任何内容。这听起来像是您所要求的:

sed 's/space[[:blank:]]\{4\}/space/' <<< "line$#*425 with space          "

答案2

将您想要保留的部分放在一个组中。不要忘记在正则表达式中引用需要引用的字符 ( \[.*^$)。

sed -e 's/\(line\$#\*425 with space\)[ \t][ \t][ \t][ \t]/\1/'

如果您的 sed 不支持\t表示制表符,请替换\t为文字制表符。

相关内容