SH CLI sed删除列表中路径以外的所有字符

时间:2019-04-07 18:11:44

标签: regex linux sed sh

有一个文件,其中列出了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

我尝试了regex:它可以像查找sed的路径的开头一样工作,但是使用时没有任何作用:

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

我想念什么?

2 个答案:

答案 0 :(得分:2)

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

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

(也消除了讨厌的useless cat)。

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

当然,如果列表使用固定的字段宽度,则可以尝试

cut -c47- listing.txt

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

答案 1 :(得分:0)

即使您的文件名包含空格,这也可以使用任何POSIX sed进行工作:

$ sed 's/\([^ ]* *\)\{4\}//' file
test/dir/one
best/folder/two

或任何POSIX awk:

$ awk '{sub(/([^ ]* *){4}/,"")}1' file
test/dir/one
best/folder/two

如果您的文件名可以包含换行符,那么我们应该谈谈。...