【发布时间】:2016-07-08 14:39:51
【问题描述】:
我有打印出目录树中最长路径的功能。假设该函数打印以下内容:./.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。谁能帮助我如何获得与上一个示例相同的输出?
如果有任何帮助或建议,我将很高兴,谢谢。
【问题讨论】:
-
这里的分隔规则是什么?
-
分隔符由用户定义,可以扩展正则表达式。
-
regex like: *de?a*,唯一匹配的是 z6upkljn.default。这里有什么规则?
-
任何匹配正则表达式
*de?a* -
*de?a*不是正则表达式,它是一个 glob 表达式,您不能将其与 sed 一起使用。