使用sed替换包含特殊字符的字符串

Markryan

我正在尝试编辑一些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

我到处搜寻了,我想我可能必须逃脱特殊字符?我碰到的每篇帖子都只给出了自己交换特殊字符的示例,因此我不太确定该怎么做。

本杰明W.

此命令将每行的第一次出现.1 (点号后跟a1和一个空格)更改为/1 –注意转义.

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

这是“.1后跟一个空格或该行的末尾,替换为/1以及后面的任何内容.1”。例如:

$ sed 's#\.1\( \|$\)#/1\1#' <<< 'SRX1409044.116884523.1'
SRX1409044.116884523/1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章