我有打印出目录树中最长路径的函数。假设该函数打印出这个:./.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
。谁可以帮助我如何获得与前一个示例中相同的输出?
我很乐意提供任何帮助或建议,谢谢。
答案 0 :(得分:1)
Sed使用(默认情况下)POSIX BRE,而不是ERE。如果您尝试与?
匹配的是"任何字符",请使用.
:echo /homes/eva/xm/xmifki00 | sed 's/mi..*//'
。
有关详细信息,请参阅man 7 re_format
。