2016-03-08 217 views
1

我試圖編輯一些fastq文件。使用sed替換包含特殊字符的字符串

基本上我想改變:

@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

'sed's#\。1#/ 1#g''? – 7171u

回答

0

該命令改變的.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 
0

小數點.\.

我覺得你的問題是你需要區分個位數和兩位數轉義。

如果你沒有超過2個位數的最簡單的是重複兩次正則表達式,如:

[0-9][0-9] 

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

  • ,因爲我不知道其中版本的sed您使用的,以及它增強的能力是。

另外我不確定你想接受什麼,以及你想要拒絕什麼。

+0

文件從 'SRX1409044.1.1'到'SRX1409044.116884523.1'我想要sed做的唯一變化是將.1結尾更改爲/ 1。 我使用sed版本4.2.2(GNU sed)。 – markryan

相關問題