我正在尝试编辑一些fastq文件。
基本上我想改变:
@SRX1409044.10.1 10 length=80
为:
@SRX1409044.10/1 10 length=80
表示文件中包含.1
的每一行。
我尝试过使用sed:
sed 's#.1#/1#g'
适用于大多数行,但适用于以下行:
@SRX1409044.11.1 11 length=80
我明白了:
@SRX1409044./1/1 /1 length=80
我有一个搜索周围,我想我可能要逃避特殊字符?我遇到的每一篇文章都只提供了自己交换特殊字符的例子,所以我不太清楚如何去做。
答案 0 :(得分:0)
小数点.
将转义为\.
我认为您的问题是需要区分单个数字和两位数。
如果您的数字不超过2位,最简单的方法是重复两次正则表达式,例如:
[0-9][0-9]
匹配任何2位数字或数字序列。
此外,我不确定你想接受什么,以及你想拒绝什么。
答案 1 :(得分:0)
此命令将第一次出现的.1
(每个行上的一个点后跟一个1
和一个空格)更改为/1
- 注意转义的.
:< / p>
sed 's|\.1 |/1 |' infile
对于示例输入文件,例如
@SRX1409044.10.1 10 length=80
@SRX1409044.12.1 10 length=80
@SRX1409044.14.1 10 length=80
@SRX1409044.15.1 10 length=80
@SRX1409044.990.1 10 length=80
结果是
@SRX1409044.10/1 10 length=80
@SRX1409044.12/1 10 length=80
@SRX1409044.14/1 10 length=80
@SRX1409044.15/1 10 length=80
@SRX1409044.990/1 10 length=80
现在,如果.1
也可能在一行的末尾,我们必须稍微更改命令,因为我们现在需要一个空格:
sed 's#\.1\( \|$\)#/1\1#' infile
这是&#34; .1
后跟空格或行尾,替换为/1
以及.1
&#34;之后的任何内容。例如:
$ sed 's#\.1\( \|$\)#/1\1#' <<< 'SRX1409044.116884523.1'
SRX1409044.116884523/1