我有一个grep难以理解的难题:我想删除字符串集合中最后一段时间后的文本(我正在使用R,因此perl语法可用).
例如,假设字符串是ABCD.txt这grep将返回ABCD,如果文本是abc.com.foo.bar,它将返回abc.com.foo.
任何帮助非常感谢(我不认为我可以喝更多的咖啡!).
以下是一些解决方案:
sub("^(.*)[.].*", "\\1", "abc.com.foo.bar") # 1
## [1] "abc.com.foo"
library(tools)
file_path_sans_ext("abc.com.foo.bar") # 3
## [1] "abc.com.foo"
Run Code Online (Sandbox Code Playgroud)
添加.关于要求删除前导句点的评论,最简单的方法就是将x其输入上面的任何一个输入字符串:
sub("^[.]*", "", x)
Run Code Online (Sandbox Code Playgroud)
要在一行中执行任何操作:
x <- c("abc.com.foo.bar", ".abc.com.foo.bar", ".vimrc")
sub("^[.]*(.*)[.]?.*$", "\\1", x) # 1a
## [1] "abc.com.foo.bar" "abc.com.foo.bar" "vimrc"
file_path_sans_ext(sub("^[.]*", "", x))
## [1] "abc.com.foo" "abc.com.foo" "vimrc"
Run Code Online (Sandbox Code Playgroud)