Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 删除包含特定短语的单词_Bash_Shell_Text - Fatal编程技术网

Bash 删除包含特定短语的单词

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)

我有

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命令时会出现错误(括号不匹配)。