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

使用sed替换包含特殊字符的字符串,sed,Sed,我正在尝试编辑一些fastq文件 基本上我想改变: @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 我已经四处搜索过了,我想我可能不得不逃离那些特殊的角色?我看到的每一篇文章都只给出了自己交换特殊字符的例子,所以我不太确定

我正在尝试编辑一些fastq文件

基本上我想改变:

@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位,最简单的方法是重复regexp两次,如:

[0-9][0-9]
匹配任何2位数字或数字序列

  • 因为我不知道您使用的是哪个版本的sed,它的增强功能是什么

此外,我不确定您要接受什么,也不确定您要拒绝什么。

小数点
被转义为
\。

我认为你的问题是你需要区分一位数和两位数

如果您的数字不超过2位,最简单的方法是重复regexp两次,如:

[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

$sed的\\.1\(\\\$\)\\/1\1 \\'此命令将每行上第一次出现的
.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

$sed的#\.1\(\\\$)\/1\1#“该文件从
SRX1409044.1.1
SRX1409044.116884523.1
我希望sed做的唯一更改是将末尾的.1更改为/1。我使用的是sed版本4.2.2(GNU sed)。该文件从
SRX1409044.1.1
SRX1409044.116884523.1
我希望sed做的唯一更改是将结尾处的.1更改为/1。我使用的是sed版本4.2.2(GNU sed)。
sed's#\.1#/1#g'
sed's#\.1#/1#g'