如何改进这块sed进行搜索和替换

时间:2018-08-08 17:29:51

标签: regex sed

我无法找到以下改进sed命令的方法来处理以下三种文件名模式。

文档名称

P1932_文档名称

1932文档名称

现在,它可以正确输出前两个示例的替换:“文档名称” 。对于第三个示例,它在名称前面添加了一个多余的空格:“文档名称” (在 Name 前面有一个空格)。

sed -E 's/^[P]{0,1}[0-9]{0,4}[_\s]{0,2}(.*$)/\\1/g'

1 个答案:

答案 0 :(得分:0)

$ sed -E 's/^P{0,1}[0-9]{0,4}[_[:space:]]{0,2}//' file
Name of document
Name of document
Name of document

您可以在GNU sed中将\s用作[[:space:]]的简写(即方括号表达式[:space:]中的字符类[...]),但是\s <括号表达式[\s]中的strong> inside 只是文字字符\s。恕我直言,您应该始终只使用字符类来避免任何混乱。因此要明确:

  • \s = [[:space:]]
  • [\s] = \s