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