使用sed消除特定的字符串

时间:2018-08-21 22:40:47

标签: sed

感谢您在此问题上的帮助。我想从字符串中消除所有不是特定模式的东西。

例如,下面我想消除所有不是“ 5TTGTC” 的内容。

但是如此处所示, ^ 5TTGTC 是不正确的。我使用了^(),^ {},^ []的不同组合,但没有一个给我我想要的东西。感谢您的反馈!

 echo ".,..,...+5TTGTC...+5TTGCC.+5TTGTC,,.,.,,.,+5ttgtc,.,,.,.+5TTGTC.+5TTGTC,..+5TTGTC" | sed 's/^5TTGTC//g'

预先感谢

3 个答案:

答案 0 :(得分:3)

如果要区分大小写,可以使用以下命令:

echo ".,..,...+5TTGTC...+5TTGCC.+5TTGTC,,.,.,,.,+5ttgtc,.,,.,.+5TTGTC.+5TTGTC,..+5TTGTC" | sed -r 's/(5TTGTC)|[,.A-Za-z+0-9]/\1/g'

上面的代码打印:

5TTGTC5TTGTC5TTGTC5TTGTC5TTGTC

上面使用的正则表达式使用alternation来捕获您感兴趣的内容。 我们匹配并捕获我们感兴趣的(5TTGCC),并且匹配所有非子字符串,在本例中为字符,.A-Za-z+0-9

您可以检查正则表达式here的行为。


@EdMorton指出,该命令可以简化为:

echo ".,..,...+5TTGTC...+5TTGCC.+5TTGTC,,.,.,,.,+5ttgtc,.,,.,.+5TTGTC.+5TTGTC,..+5TTGTC" | sed -r 's/(5TTGTC)|./\1/g'

您可以try this here

为了兼容 sed 版本,可以将 -r 标志替​​换为 -E 标志。

答案 1 :(得分:1)

您不清楚要达到的目标。 -o中的grep选项是到达您要去的地方的一种方法。

echo ".,..,...+5TTGTC...+5TTGCC.+5TTGTC,,.,.,,.,+5ttgtc,.,,.,.+5TTGTC.+5TTGTC,..+5TTGTC" | grep -o '5TTGTC'

输出: 5TTGTC 5TTGTC 5TTGTC 5TTGTC 5TTGTC 然后,您可以将5TTGTC更改为一种模式,例如grep -o '[0-9]TT[AG]GTC'

答案 2 :(得分:1)

使用任何sed:

$  echo ".,..,...+5TTGTC...+5TTGCC.+5TTGTC,,.,.,,.,+5ttgtc,.,,.,.+5TTGTC.+5TTGTC,..+5TTGTC" |
sed 's/#//g; s/5TTGTC/#/g; s/[^#]//g; s/#/5TTGTC/g'
5TTGTC5TTGTC5TTGTC5TTGTC5TTGTC

任何awk:

$ echo ".,..,...+5TTGTC...+5TTGCC.+5TTGTC,,.,.,,.,+5ttgtc,.,,.,.+5TTGTC.+5TTGTC,..+5TTGTC" |
awk -v str='5TTGTC' '{gsub(str,"\n"); gsub(/[^\n]/,""); gsub(/\n/,str)}1'
5TTGTC5TTGTC5TTGTC5TTGTC5TTGTC