我在文本文件中有一个字符串列表:
AY498934.1_cds_AAS79865.1_1_1
AY498934.1_cds_AAS79865.1_1_2
AY498934.1_cds_AAS79865.1_1_3
我想删除最后一个“_”之后的所有内容。
预期成绩:
AY498934.1_cds_AAS79865.1_1
AY498934.1_cds_AAS79865.1_1
AY498934.1_cds_AAS79865.1_1
答案1
sed 's/_[^_]*$//' < file
替换后跟除( ) 之外的_
0 个或多个 ( *
) 字符,后跟行尾_
[^_]
$
为没有什么。
答案2
这是另一种方法:
sed -nr 's/(.*)_.*/\1/p' file
贪婪地匹配(匹配的最长字符串)直到_
(称为 \1)的所有字符,然后是该行的其余部分,并将其替换为组 \1。
如果没有 -r 参数,反向引用(如 \1)将无法工作。
执行所有 sed 命令后,选项 -n 会关闭模式空间中所有内容的常规打印。
cat file
AY498934.1_cds_AAS79865.1_1_1
AY498934.1_cds_AAS79865.1_1_2
AY498934.1_cds_AAS79865.1_1_3
sed -nr 's/(.*)_.*/\1/p' file
AY498934.1_cds_AAS79865.1_1
AY498934.1_cds_AAS79865.1_1
AY498934.1_cds_AAS79865.1_1