感谢您在此问题上的帮助。我想从字符串中消除所有不是特定模式的东西。
例如,下面我想消除所有不是“ 5TTGTC” 的内容。
但是如此处所示, ^ 5TTGTC 是不正确的。我使用了^(),^ {},^ []的不同组合,但没有一个给我我想要的东西。感谢您的反馈!
echo ".,..,...+5TTGTC...+5TTGCC.+5TTGTC,,.,.,,.,+5ttgtc,.,,.,.+5TTGTC.+5TTGTC,..+5TTGTC" | sed 's/^5TTGTC//g'
预先感谢
答案 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