首页 > 解决方案 > SH CLI sed 从列表中删除除路径之外的所有字符

问题描述

有一个rsync文件列出了文件的结果:

drwxrwxrwx          4,096 2018/12/10 15:27:39 test/dir/one
drwxrwxrwx          4,096 2018/12/10 15:27:39 best/folder/two

如何使用sed摆脱路径以外的一切?

想要的结果:

test/dir/one
best/folder/two

我尝试了这个正则表达式:它应该可以找到路径的前面作为基础,sed但它在使用时没有任何效果:

cat listing.txt | sed 's/.*[0-9]+:[0-9]+:[0-9]+ //' | less

我错过了什么?

标签: regexlinuxsedsh

解决方案


sed可能不支持+这种形式的重复运算符。尝试

sed 's/.*[0-9]\+:[0-9]\+:[0-9]\+ //' listing.txt

(这也消除了讨厌的无用cat)。

回想一下,这sed早于现代正则表达式的许多装饰。您sed可能支持-ror-E标志以启用扩展的正则表达式支持(与许多新手最熟悉的现代正则表达式方言仍然相去甚远),但这不是可移植的。

当然,如果列表使用固定的字段宽度,也许只需尝试

cut -c47- listing.txt

(不在我可以验证精确数字的地方 - 使用不同的值。)


推荐阅读