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
。
我有打印目录树中最长路径的功能。假设该函数打印如下:./.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
。