我希望删除包含特定短语(TCONS)的所有字符串
我有
TCONS_5424934 XLOC_2348324
catgcatgcatgcatgcatcgt
TCONS_33345 XLOC_2342323
catgcatgcatgcatgcatcgt
我希望
XLOC_2348324
catgcatgcatgcatgcatcgt
XLOC_2342323
catgcatgcatgcatgcatcgt
我尝试过使用:
sed 's/\S*\(TCONS)\S*//g'
但这只是删除了整条线。如何删除整个单词?感谢
答案 0 :(得分:1)
对正则表达式进行微小修改可以解决问题:
sed 's/\S*TCONS\S*\s*//g' file
这将删除任意数量的非空格,后跟TCONS,后跟任意数量的非空格以及任何尾随空格。
答案 1 :(得分:0)
您也可以使用字符类表达相同的想法,可读性可能/可能不会更好,它更多的是品味,例如。
sed 's/[^ \t]*TCONS[^ \t]*[ \t]*//g' file.txt
基本上它只查找包含TCONS
的任何字符串,由space
或tab
(如果存在)分隔,并删除该字符串以及任意数量的后续空格或制表符。字符串和空白指示符(\S
和\s
)是一个非常干净的实现,如Tom所示,但字符类也是一个可行的选项,取决于对你最有意义的内容。
答案 2 :(得分:0)
那个特定数据的GNU awk(和mawk):
$ awk -v RS="[ \n]" '!/TCONS/' file
XLOC_2348324
catgcatgcatgcatgcatcgt
XLOC_2342323
catgcatgcatgcatgcatcgt
它使用空格和换行符作为记录分隔符,并且基本上将一个记录中的多个单词作为多个记录分解,但是您的预期输出允许它。
答案 3 :(得分:0)
这样做:
sed 's/\b\s*\S*TCONS\S*\s*\b//g'
正则表达式中的\ b匹配单词边界。 - 所以它只会删除带有TCONS的单词。它还会删除word前后的所有空格字符,其子字符串为TCONS