Regex Unix:按正则表达式分隔符剪切字符串

Regex Unix:按正则表达式分隔符剪切字符串,regex,string,bash,sed,cut,Regex,String,Bash,Sed,Cut,我有一个函数,可以打印出目录树中最长的路径。假设该函数打印以下内容:/.mozilla/firefox/z6upkljn.default/storage/permanent/chrome/idb/2918063365piupsah.files 我想做的是在与用户定义的正则表达式匹配之后剪切这个字符串 例如,如果用户输入regex,如:*de?a*,则唯一匹配项是z6upkljn.default。最后,输出将是/.mozilla/firefox 这是我找到的一个代码示例sed的/My_表达式.*/

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

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

例如,如果用户输入regex,如:
*de?a*
,则唯一匹配项是
z6upkljn.default
。最后,输出将是
/.mozilla/firefox

这是我找到的一个代码示例
sed的/My_表达式.*/'
其中My_表达式是用户定义的用于剪切的正则表达式分隔符

它适用于这个输入
$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。如果您试图匹配的
是“任意字符”,请使用
echo/homes/eva/xm/xmifki00 | sed's/mi..*/'


有关更多详细信息,请参见
man 7 re_格式

这里的定界规则是什么?定界是由用户定义的,可以扩展为regular expression.regex,如:*de?a*,唯一匹配的是z6upkljn.default。这里的规则是什么?任何与正则表达式
*de?a*
*de?a*
匹配的东西都不是正则表达式,它是一个全局表达式,不能与sed一起使用。那么有什么可能的解决方案使它更友好吗?是的。使用sh、bash、perl、python等编写自己的代码,调用该语言的“glob”库。或者将glob翻译成正则表达式——这并不困难。也许你应该
manbash
来了解globbing是如何工作的。是的,尽管它不是标准的。基于BSD的
sed
s具有
-E
选项,GNU
sed
使用
-r
。然而,这两种方法都不能使
匹配任何字符;这不是POSIX正则表达式语法的任何一种风格的特征。正如上面提到的,您的示例确实是一个glob,而不是我熟悉的任何方言的正则表达式。