如何在 UNIX/LINUX 中特定行的末尾添加字符?

How to add character at the end of specific line in UNIX/LINUX?

这是我的输入文件。我想在行首有“>”的行末尾添加一个字符“:”。我试过 seq -i 's|$|:|' input.txt 但“:”被添加到每行的所有结尾。也很难调出特定的行号,因为在我的每个输入文件中,该行包含“>”,出现在不同的行号中。我想 运行 多个文件的循环所以它没用。

>Pas_pyrG_2
AAAGTCACAATGGTTAAAATGGATCCTTATATTAATGTCGATCCAGGGACAATGAGCCCA
TTCCAGCATGGTGAAGTTTTTGTTACCGAAGATGGTGCAGAAACAGATCTGGATCTGGGT
>Pas_rpoB_4
CAAACTCACTATGGTCGTGTTTGTCCAATTGAAACTCCTGAAGGTCCAAACATTGGTTTG
ATCAACTCGCTTTCTGTATACGCAAAAGCGAATGACTTCGGTTTCTTGGAAACTCCATAC
CGCAAAGTTGTAGATGGTCGTGTAACTGATGATGTTGAATATTTATCTGCAATTGAAGAA
>Pas_cpn60_2
ATGAACCCAATGGATTTAAAACGCGGTATCGACATTGCAGTAAAAACTGTAGTTGAAAAT
ATCCGTTCTATTGCTAAACCAGCTGATGATTTCAAAGCAATTGAACAAGTAGGTTCAATC
TCTGCTAACTCTGATACTACTGTTGGTAAACTTATTGCTCAAGCAATGGAAAAAGTAGGT
AAAGAAGGCGTAATCACTGTAGAAGAAGGCTCAGGCTTCGAAGACGCATTAGACGTTGTA

这是专业的输出文件:

    >Pas_pyrG_2:
    AAAGTCACAATGGTTAAAATGGATCCTTATATTAATGTCGATCCAGGGACAATGAGCCCA
    TTCCAGCATGGTGAAGTTTTTGTTACCGAAGATGGTGCAGAAACAGATCTGGATCTGGGT
    >Pas_rpoB_4:
    CAAACTCACTATGGTCGTGTTTGTCCAATTGAAACTCCTGAAGGTCCAAACATTGGTTTG
    ATCAACTCGCTTTCTGTATACGCAAAAGCGAATGACTTCGGTTTCTTGGAAACTCCATAC
    CGCAAAGTTGTAGATGGTCGTGTAACTGATGATGTTGAATATTTATCTGCAATTGAAGAA
    >Pas_cpn60_2:
    ATGAACCCAATGGATTTAAAACGCGGTATCGACATTGCAGTAAAAACTGTAGTTGAAAAT
    ATCCGTTCTATTGCTAAACCAGCTGATGATTTCAAAGCAATTGAACAAGTAGGTTCAATC
    TCTGCTAACTCTGATACTACTGTTGGTAAACTTATTGCTCAAGCAATGGAAAAAGTAGGT
    AAAGAAGGCGTAATCACTGTAGAAGAAGGCTCAGGCTTCGAAGACGCATTAGACGTTGTA

seq是否有更多选项可以修改或其他命令可以解决这个问题?

使用ed编辑文件:

printf "%s\n" 'g/^>/s/$/:/' w | ed -s input.txt

对于以 > 开头的每一行,在末尾添加一个冒号,然后 w 将更改的文件写回磁盘。

sed -i  '/^>/ s/$/:/' input.txt

在输入行中搜索匹配 ^> 的行(“以 > 字符开头的正则表达式)。那些 s 替换 : 表示行尾(你做对了这部分)。

/ 斜杠是 sed 中的标准分隔符。如果你想使用不同的字符,一定要传递 -es|$|:| 可能不会起作用。由于 / 个字符与 | 个字符不同,它们在 shell 中是没有意义的字符,所以最好使用它们,除非模式还包含斜杠,在这种情况下事情会变得笨拙。

小心sed -i。进行备份 - 使用 diff 比较文件,确保您知道发生了什么变化。

On OSX -i 需要参数。