Unix:用正则表达式分隔符

时间:2016-03-21 21:33:07

标签: regex string bash sed cut

我有打印出目录树中最长路径的函数。假设该函数打印出这个:./.mozilla/firefox/z6upkljn.default/storage/permanent/chrome/idb/2918063365piupsah.files

我想要做的是在与用户定义的正则表达式匹配后剪切此字符串。

例如,如果用户输入正则表达式:*de?a*,则唯一匹配为z6upkljn.default。所以最后,输出将是./.mozilla/firefox

以下是我找到的代码示例sed 's/My_expression.*//' 其中My_expression为正则表达式分隔符用于由用户定义的剪切。

适用于此输入$echo /homes/eva/xm/xmikfi00 | sed 's/mik.*//',输出我得/homes/eva/xm/x。正如所料。

但如果我输入简单的正则表达式$echo /homes/eva/xm/xmifki00 | sed 's/mi?.*//',则输出为/homes/eva/xm/xmikfi00。谁可以帮助我如何获得与前一个示例中相同的输出?

我很乐意提供任何帮助或建议,谢谢。

1 个答案:

答案 0 :(得分:1)

Sed使用(默认情况下)POSIX BRE,而不是ERE。如果您尝试与?匹配的是"任何字符",请使用.echo /homes/eva/xm/xmifki00 | sed 's/mi..*//'

有关详细信息,请参阅man 7 re_format