我正在尝试根据 sed 的上下文转换变量字符串。
string="GAGGTGGGTGGGGAGC"
echo $string | sed -r 's/G+([AT])/A+\1/g'
结果是:A+AA+TA+TA+AGC
。但我期望:AAATAAAATAAAAGC
换句话说,我想将一段未知的 G 替换为 As,前提是它们后面跟着 A 或 T。我们如何恢复匹配模式的 G 数量以在替换模式中重用它?
最佳答案
使用 sed,使用反向引用和 t
(测试)如果替换成功,则在命令开头循环执行进一步替换的命令:
$ sed ':a;s/G\([AT]\)\(.*\)/A\1\2/;ta;' <<< "GAGGTGGGTGGGGAGC"
AAAATAAATAAAAAGC
它是如何工作的:
-
:a
:a
即将循环的标签 -
s
: 替换命令 -
G\([AT]\)
:搜索G
接下来是A
或T
。第二个字母被捕获并将用于使用反向引用的替换字符串 -
\(.*\)
:捕获剩余字符 -
A\1\2
:替换为A
后跟之前捕获的字符串(A
或T
以及其余字符) -
ta
:如果之前的替换成功,则转到标签:a
脚本的(开头)检查进一步的替换
关于regex - 使用 sed 进行变量字符串转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42505836/