[英]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位數字或數字序列。
另外,我不確定您要接受什么,也要拒絕什么。
此命令將每行的第一個出現的.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.