删除冒号前的所有文字(Remove all text before colon)

2019-06-18 00:55发布

我有含有一定数目的行的文件。 每一行看起来是这样的:

TF_list_to_test10004/Nus_k0.345_t0.1_e0.1.adj:PKMYT1

我想所有之前删除“:”字符,以仅保留是基因名称的PKMYT1。 因为我不是在正则表达式脚本专家谁能帮助我做到这一点使用的Unix(SED或AWK)或R'

Answer 1:

以下是R中做这件事的方法有两种:

foo <- "TF_list_to_test10004/Nus_k0.345_t0.1_e0.1.adj:PKMYT1"

# Remove all before and up to ":":
gsub(".*:","",foo)

# Extract everything behind ":":
regmatches(foo,gregexpr("(?<=:).*",foo,perl=TRUE))


Answer 2:

与使用简单的正则表达式gsub()

x <- "TF_list_to_test10004/Nus_k0.345_t0.1_e0.1.adj:PKMYT1"
gsub(".*:", "", x)
"PKMYT1"

?regex?gsub更多的帮助。



Answer 3:

当然,还有在R.超过2种方式下面是另一个。

unlist(lapply(strsplit(foo, ':', fixed = TRUE), '[', 2))

如果字符串具有恒定的长度我想象substr会比这或正则表达式的方法快。



Answer 4:

使用SED:

sed 's/.*://' < your_input_file > output_file

这将取代任何东西,然后什么也没有冒号,所以它会删除一切直到并包括每行的最后一个冒号( 因为*是默认的贪婪 )。

按照乔希·奥布莱恩的评论,如果你想只替换直至并包括第一个冒号,这样做:

sed "s/[^:]*://"

这将匹配任何不是一个冒号,然后是一个冒号,什么也没有更换。

请注意,对于这些模式,他们将停止对每行第一个匹配的。 如果你想更换一个发生某一行上每场比赛中,添加“ g ”(全局)选项添加到命令的末尾。

还要注意的是在Linux上(而不是在OSX),您可以编辑就地与文件-i例如:

sed -i 's/.*://' your_file


Answer 5:

您可以使用awk是这样的:

awk -F: '{print $2}' /your/file


Answer 6:

如果你有GNU coreutils可使用cut

cut -d: -f2 infile


Answer 7:

我工作的一个类似的问题。 约翰和乔希·奥布莱恩的意见并获得成功。 我开始与这个tibble:

library(dplyr)
my_tibble <- tibble(Col1=c("ABC:Content","BCDE:MoreContent","FG:Conent:with:colons"))

看起来像:

  | Col1 
1 | ABC:Content 
2 | BCDE:MoreContent 
3 | FG:Content:with:colons

我需要创建这个tibble:

  | Col1                  | Col2 | Col3 
1 | ABC:Content           | ABC  | Content 
2 | BCDE:MoreContent      | BCDE | MoreContent 
3 | FG:Content:with:colons| FG   | Content:with:colons

而与此代码(R版本3.4.2)这样做。

my_tibble2 <- mutate(my_tibble
        ,Col2 = unlist(lapply(strsplit(Col1, ':',fixed = TRUE), '[', 1))
        ,Col3 = gsub("^[^:]*:", "", Col1))


Answer 8:

下面是2级当量的解决方案:

第一种使用Perl的-a自动分割功能分割每条线为使用字段: ,填充F字段阵列,并打印第二场$F[1]计计数从字段0开始)

perl -F: -lane 'print $F[1]' file

第二个使用正则表达式来代替s///^行的开头, .*:用冒号结束,什么也没有任何字符

perl -pe 's/^.*://' file


Answer 9:

我从最好的回应@Sacha Epskamp错过了一些非常简单的举动就是使用子功能,在这种情况下采取之前的所有“:”(而不是去掉),所以这是非常简单的:

foo <- "TF_list_to_test10004/Nus_k0.345_t0.1_e0.1.adj:PKMYT1"

# 1st, as she did to remove all before and up to ":":
gsub(".*:","",foo)

# 2nd, to keep everything before and up to ":": 
gsub(":.*","",foo)

基本上,同样的事情,只是改变了“:”子参数内的位置。 希望这将有助于。



文章来源: Remove all text before colon