如何使用sed删除最后一个目录,例如:如何从sed路径中删除最后一个目录(不使用dirname)?
echo "/dir1/dir2/dir3/dir4" | sed .....
所以我会得到/dir1/dir2/dir3
。
如何使用sed删除最后一个目录,例如:如何从sed路径中删除最后一个目录(不使用dirname)?
echo "/dir1/dir2/dir3/dir4" | sed .....
所以我会得到/dir1/dir2/dir3
。
sed 's,/*[^/]\+/*$,,'
如果它是shell脚本的一部分,那么dirname
肯定会更清晰。
如果目录中有“。”,则不起作用。 (期间)的名字 – 2014-08-05 15:33:41
@ChrisF Huh?你为什么这么写? 'echo a.b/c.d/e.f | sed's,/ * [^ /] \ +/* $ ,,''返回'a.b/c.d'或者它不在你的sed版本中?我的正则表达式与'.'完全无关。 – przemoc 2015-01-31 23:01:41
echo“/ etc1/etc2/etc3/etc”| SED -e “S // [^ /] * $ //”
产生
/ETC1/ETC2/etc3
在不最后一个斜线后的端基本上剥离的任何包含另一个斜线。
糟糕,使用逗号作为przemoc所指定的分隔符会更好,以避免必须在脚本中跳过斜杠,使其更具可读性。我总是犯这个错误。 – 2010-07-04 14:13:03
你没有使用外部工具
$ a="/dir1/dir2/dir3/dir4"
$ echo ${a%/*}
虽然目前接受的答案绝对是好的,但我相信如果问题属于bash,这个答案应该是被接受的答案。 Bash参数替换感觉比sed更加“真实”。 – anuragw 2017-03-15 21:42:17
您可以使用 “目录名” shell命令:
dirname /dir2/dir3/dir4
请,更注重格式和你的答案的措词。 – 2010-07-04 14:10:05
@Pavel:ummm,errrr,问题? (和注释);-) – 2010-07-05 04:04:05
@丹尼斯,EPIC失败,无法恢复:-D – 2010-07-05 05:05:09