Mac 终端:Sed 正则表达式,提取字符串的一部分

Mac 终端:Sed 正则表达式,提取字符串的一部分

我有一个字符串,正好是一个文件路径

/Users/dengjiangzhou/Documents/源码/198/李宏毅-机器学习2017秋季.txt

我需要提取其文件夹的路径,

要得到/Users/dengjiangzhou/Documents/源码/198/

这是我尝试过的。

echo "/Users/dengjiangzhou/Documents/源码/198/李宏毅-机器学习2017秋季.txt " | sed  's@.*\(/.+\)@\1@p' 

/Users/dengjiangzhou/Documents/源码/198/李宏毅-机器学习2017秋季.txt 

我使用正则表达式捕获组,尝试捕获第一组/李宏毅-机器学习2017秋季.txt,并将其替换为

似乎正则表达式捕获组具有从末尾到开头匹配的效果。

那么我会得到

/Users/dengjiangzhou/Documents/源码/198

我读过了Sed 正则表达式,在 Mac 终端中提取字符串的一部分一次又一次。

希望得到帮助,朋友

非常想得到/Users/dengjiangzhou/Documents/源码/198/

/Users/dengjiangzhou/Documents/源码/198不好。

有什么好主意吗?

答案1

+第一次尝试没有成功,因为缺少转义符

echo "/Users/dengjiangzhou/Documents/源码/198/李宏毅-机器学习2017秋季.txt " | sed  's@.*\(/.\+\)@\1@' 
/李宏毅-机器学习2017秋季.txt 

(对于扩展 RE,可以使用-r或选项来避免元字符的转义)。-E

您想要的是 dirname 部分,然后只需将 ER 的第一部分分组。

echo "/Users/dengjiangzhou/Documents/源码/198/李宏毅-机器学习2017秋季.txt " | sed  's@\(.*\)/.*@\1@' 
/Users/dengjiangzhou/Documents/源码/198

中的量词sed是贪婪的,这意味着当你要求匹配像这样的正则表达式时.*/.*,第一个.*将匹配全部行直到最后,因为你要求匹配.任意数字中的任何内容*,并且 a/是任意数字中的任何内容。

编辑-如果你想阅读有关正则表达式和 sed 的内容,请看一看 https://www.regular-expressions.info/tutorial.html http://www.grymoire.com/Unix/Sed.html#uh-0

答案2

dirname "/Users/dengjiangzhou/Documents/源码/198/李宏毅-机器学习2017秋季.txt"

相关内容