经过大量搜索,我发现了几种使用 sed 或 tr 删除换行符的方法
sed ':a;N;$!ba;s/\n//g'
tr -d '\n'
但是,我找不到从特定行中排除操作的方法。我了解到可以使用“!”在 sed 中作为从后续操作中排除地址的方法,但我无法弄清楚如何将它合并到上面的 sed 命令中。这是我要解决的问题的示例。
我有一个格式如下的文件:
>sequence_ID_1
atcgatcgggatc
aatgacttcattg
gagaccgaga
>sequence_ID_2
gatccatggacgt
ttaacgcgatgac
atactaggatcag
at
我想要以这种方式格式化文件:
>sequence_ID_1
atcgatcgggatcaatgacttcattggagaccgaga
>sequence_ID_2
gatccatggacgtttaacgcgatgacatactaggatcagat
我一直专注于尝试排除包含“>”字符的行,因为这是唯一存在于具有“>”字符的行上的常量正则表达式(注意:sequence_ID_n 对于前面的每个条目都是唯一的通过“>”,因此不能依赖于正则表达式匹配)。
我试过这个:
sed ':a;N;$!ba;/^>/!s/\n//g' file.txt > file2.txt
它运行时没有产生错误,但输出文件与原始文件相同。
也许我不能用 sed 做到这一点?也许我错误地处理了这个问题?我是否应该尝试定义一系列要操作的行(即仅以“>”开头的行之间的行)?
我是基本文本操作的新手,所以非常感谢任何建议!
最佳答案
这个 awk
应该可以工作:
$ awk '/^>/{print (NR==1)?$0:"\n"$0;next}{printf "%s", $0}END{print ""}' file
>sequence_ID_1
atcgatcgggatcaatgacttcattggagaccgaga
>sequence_ID_2
gatccatggacgtttaacgcgatgacatactaggatcagat
关于regex - 删除换行符 (\n) 但排除具有特定正则表达式的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22702065/