如何用sed命令替换特定字符的字符串

时间:2019-05-30 07:54:59

标签: linux

我想使用sed命令删除一些特定的字符串。

这是文件(tRNA.fa):

>tRNA-Ala-AGC-1-1 (chrII.trna5-AlaAGC) chrII:4565386-4565457 (+) Ala (AGC) 72 bp Sc: 72.4
GGGGGTATAGCTCAGTGGTAGAGCGCTCCCTTAGCATGGGAGAGGgCTGGGGTTCAATTC
CCCATACCTCCA
>tRNA-Ala-AGC-1-10 (chrX.trna261-AlaAGC) chrX:7378738-7378809 (-) Ala (AGC) 72 bp Sc: 72.4
GGGGGTATAGCTCAGTGGTAGAGCGCTCCCTTAGCATGGGAGAGGgCTGGGGTTCAATTC
CCCATACCTCCA
>tRNA-Ala-AGC-1-11 (chrX.trna260-AlaAGC) chrX:7507245-7507316 (-) Ala (AGC) 72 bp Sc: 72.4
GGGGGTATAGCTCAGTGGTAGAGCGCTCCCTTAGCATGGGAGAGGgCTGGGGTTCAATTC
CCCATACCTCCA

我只想保留“> tRNA-XXX-XXX-X-X”和下一行。

所以,我试图用sed命令替换不必要的信息:

sed -i 's/\(.*\).*[0-9]$//g' tRNA.fa

但是,我删除了所有以'>'开头的行。

我希望得到的结果是:

>tRNA-Ala-AGC-1-1 
GGGGGTATAGCTCAGTGGTAGAGCGCTCCCTTAGCATGGGAGAGGgCTGGGGTTCAATTC
CCCATACCTCCA
>tRNA-Ala-AGC-1-10 
GGGGGTATAGCTCAGTGGTAGAGCGCTCCCTTAGCATGGGAGAGGgCTGGGGTTCAATTC
CCCATACCTCCA
>tRNA-Ala-AGC-1-11 
GGGGGTATAGCTCAGTGGTAGAGCGCTCCCTTAGCATGGGAGAGGgCTGGGGTTCAATTC
CCCATACCTCCA

如果您知道如何更换它,请告诉我,谢谢。

1 个答案:

答案 0 :(得分:1)

如果您想匹配(,请不要忽略它。

sed -i 's/(.*).*[0-9]$//g' tRNA.fa

但是实际上,以下内容足以删除(之后的所有内容:

sed -i 's/(.*//' tRNA.fa

请注意,您可能还希望s/ (.*//删除(之前的空格。

\(...\)用于将表达式分组为一个子组。它最常用于向后引用,但也可能用作\(abc\)*-将搜索零次或多次出现的字符串"abc"

Here是一个很棒的sed简介。