我想删除第二个下划线之后的所有文本(包括下划线本身),但不是每一行。每条目标行均以模式 (>gi_) 开头。
例子。
输入
>gi_12_pork_cat
ACGT
>gi_34_pink_blue
CGTA
输出
>gi_12
ACGT
>gi_34
CGTA
答案1
对于我们当中的懒人:
cut -d_ -f1,2 input
给我们:
bash-[514]$ cat input
>gi_12_pork_cat
ACGT
>gi_34_pink_blue
CGTA
bash-[515]$ cut -d_ -f1,2 input
>gi_12
ACGT
>gi_34
CGTA
答案2
还有一个简写使用awk
:
awk -F_ '{print $1 (NF>1? FS $2 : "")}' yourfile
答案3
$ awk -F_ 'BEGIN {OFS="_"} /^>gi/ {print $1,$2} ! /^>gi/ {print}' input
>gi_12
ACGT
>gi_34
CGTA
答案4
sed -ne '/^>gi_/s/_/\n/2;P' yourfile
解释
- 仅对于以字符串开头的行
>gi_
,我们才尝试影响 sub_ ---> \n
。然后,我们使用命令打印模式空间,P
如果找到一个或整个换行符,该命令将打印到第一个换行符。