![sed 命令和格式化一行](https://linux22.com/image/61257/sed%20%E5%91%BD%E4%BB%A4%E5%92%8C%E6%A0%BC%E5%BC%8F%E5%8C%96%E4%B8%80%E8%A1%8C.png)
我需要转动这些标题:
'>>tr|G1PEZ0|G1PEZ0_MYOLU Uncharacterized protein (Fragment) OS=Myotis lucifugus GN=SNCG PE=4 SV=1
就这样:
'>G1PEZ0_MYOLU
请忽略开头的撇号。
答案1
这个怎么样:
str='>>tr|G1PEZ0|G1PEZ0_MYOLU Uncharacterized protein (Fragment) OS=Myotis lucifugus GN=SNCG PE=4 SV=1'
echo "$str" | sed -e 's/ .*//' -e 's/.*|//' -e 's/^/>/'
它使用 3 个单独的替换 - 删除从该行第一个空格开始的所有内容,删除|
该行到最后一个空格的所有内容,然后将>
back 作为该行的第一个字符。
答案2
这也可以使用以下方法完成cut
:
input=">>tr|G1PEZ0|G1PEZ0_MYOLU Uncharacterized protein (Fragment) OS=Myotis lucifugus GN=SNCG PE=4 SV=1"
echo "$input" | cut -d" " -f1 | cut -d"|" -f3 | sed "s/^/>/"
答案3
与tr
和cut
:
tr ' |' '>>' <input |cut -d\> -f1,6
...tr
将所有空间和|
管道转换为>
直角,然后从所得的有限cut
域中仅取出第 1 个和第 6 个域。> -d
-f
用 sed...
sed -n 'y/ /\n/;s/.*|/>/;P' <input
它还将y///
所有空格转换为\n
ewline,然后s///
将最左边和最长的以管道结尾的字符串替换|
为单个字符串>
,然后P
仅打印到\n
模式空间中的第一个 ewline。