Unix:通过正则表达式定界符剪切字符串

Unix: Cut string by regex delimiter

我有打印目录树中最长路径的功能。假设该函数打印如下:./.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。任何人都可以帮助我如何获得与上一个示例相同的输出?

如果有任何帮助或建议,我将很高兴,谢谢。

Sed 使用(默认)POSIX BRE,而不是 ERE。如果您要与 ? 匹配的是 "any character",请使用 .echo /homes/eva/xm/xmifki00 | sed 's/mi..*//'.

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