簡體   English   中英

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

[英]Using sed to replace strings containing special characters

我正在嘗試編輯一些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

我已經搜尋了一下,我想我可能必須逃脫特殊字符? 我碰到的每篇文章都只給出了自己交換特殊字符的示例,因此我不太確定該怎么做。

小數點. 被轉義為\\.

我認為您的問題是您需要區分一位數字和兩位數字。

如果您的位數不超過2位,最簡單的方法是重復兩次正則表達式,例如:

[0-9][0-9]

匹配任何2位數字或數字序列。

  • 因為我不知道您使用的是哪個版本的sed ,以及它的增強功能是什么。

另外,我不確定您要接受什么,也要拒絕什么。

此命令將每行的第一個出現的.1 (點后跟1和一個空格)更改為/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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM