regex - 如何在文本文件中的正则表达式之前和之后添加换行符?

标签 regex text edit

这是我要编辑的文件的摘录:

>chr1|-|9|S|somatic ACCACAGCCCTGTTTTACGTTGCGTCATCGCCCCGGGTGCCTGGTGACGTCACCAGCCCGCTCG >chr1|+|9|Y|somatic ACCACAGCCCTGTTTTACGTTGCGTCATCGCCCCGGGTGCCTGGTGACGTCACCAGCCCGCTCG

我想要一个新的文本文件,在“>”之前和“somatic”之后或“germline”之后添加换行符,在 R 或 Unix 中该怎么办?

预期输出:

>chr1|-|9|S|somatic
ACCACAGCCCTGTTTTACGTTGCGTCATCGCCCCGGGTGCCTGGTGACGTCACCAGCCCGCTCG
>chr1|+|9|Y|somatic
ACCACAGCCCTGTTTTACGTTGCGTCATCGCCCCGGGTGCCTGGTGACGTCACCAGCCCGCTCG

最佳答案

根据您输入的外观,您可以简单地用换行符替换空格:

tr -s ' ' '\n' <infile >outfile

(某些 tr 方言不喜欢 \n。尝试 '\012' 或文字换行符:左引号、换行符、收盘价。)

如果这不起作用,您可以在 sed 中轻松完成此操作。如果体细胞是静态的,只需对其进行硬编码:

sed -e 's/somatic */&\n/g' -e 's/ >/\n>/g' file >newfile

关于不同 sed 方言的常见警告适用。有些版本不喜欢 \n 作为换行符,有些版本需要换行符或分号而不是多个 -e 参数。

在 Linux 上,您可以就地修改文件:

sed -i 's/somatic */&\
/g
s/ >/\
/g' file

(对于变化,我将展示如果您的 sed 无法识别 \n 但允许文字换行符,如何执行此操作,以及如何将脚本放入单个多行字符串。)

在 *BSD(包括 MacOS)上,您始终需要向 -i 添加参数; sed -i '' ...

如果 somatic 是可变的,但您总是想替换楔形后面的第一个空格,请尝试类似的操作

sed 's/\(>[^ ]*\) /\1\n/g'

>[^ ] 匹配楔形后跟零个或多个非空格字符。括号将匹配的字符串捕获到 \1 中。同样,某些 sed 变体不需要在括号前面有反斜杠,或者只是……不同。

如果您的行很长,您可能会遇到有问题的 sed。也许可以尝试 Perl。 (幸运的是,不用担心方言!)

perl -i -pe 's/(>[^ ]*) /$1\n/g;s/ >/\n>/g' file

(如果您不想修改输入文件,请跳过-i选项。然后输出将是标准输出。)

关于regex - 如何在文本文件中的正则表达式之前和之后添加换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26885205/

相关文章:

javascript - 如何使用 D3.js 包裹长文本标签?

android - 编辑smali。 Issue : Low 16 bits must be zeroed out. 是不是十六进制的id不对?

java - 正则表达式:带有分隔线图案的多行

c# - 中间有一个特殊字符的字母数字字符的正则表达式

匹配以下任何一项的正则表达式 - "a","p","am","pm"等

javascript - 使用 JavaScript 中的 RegExp 删除重复的逗号和开头/结尾处的多余逗号,并删除重复的数字?

git - 逐字的 git 修订

c++ - C++中文本编辑器的链接列表

php - 更新数据在 Php 和 MySql 中不起作用

jquery - 在 jqGrid 中,您可以一次内联编辑多行然后执行一次提交吗?