如何在 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
中的标准分隔符。如果你想使用不同的字符,一定要传递 -e
或 s|$|:|
可能不会起作用。由于 /
个字符与 |
个字符不同,它们在 shell 中是没有意义的字符,所以最好使用它们,除非模式还包含斜杠,在这种情况下事情会变得笨拙。
小心sed -i
。进行备份 - 使用 diff
比较文件,确保您知道发生了什么变化。
On OSX -i
需要参数。
这是我的输入文件。我想在行首有“>”的行末尾添加一个字符“:”。我试过 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
中的标准分隔符。如果你想使用不同的字符,一定要传递 -e
或 s|$|:|
可能不会起作用。由于 /
个字符与 |
个字符不同,它们在 shell 中是没有意义的字符,所以最好使用它们,除非模式还包含斜杠,在这种情况下事情会变得笨拙。
小心sed -i
。进行备份 - 使用 diff
比较文件,确保您知道发生了什么变化。
On OSX -i
需要参数。