有一个文件,其中列出了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
我想念什么?
答案 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
如果您的文件名可以包含换行符,那么我们应该谈谈。...