regex - 使用 sed 进行变量字符串转换

标签 regex bash sed

我正在尝试根据 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接下来是 AT 。第二个字母被捕获并将用于使用反向引用的替换字符串
  • \(.*\) :捕获剩余字符
  • A\1\2 :替换为 A后跟之前捕获的字符串(AT 以及其余字符)
  • ta :如果之前的替换成功,则转到标签:a脚本的(开头)检查进一步的替换

关于regex - 使用 sed 进行变量字符串转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42505836/

相关文章:

docker - 当 docker-compose run -e 调用我的环境时,Sed 在文件中

python - 查找重叠的匹配项

JavaScript 正则表达式检查搜索的字符串前面是否没有任何内容或空格

android - repo :在自动 bash 脚本中找不到用于构建 cyanogenmod 的命令

bash - 为什么在 bash 中使用管道命令与 && 连接命令时得到不同的结果?

bash - 如何在查找表达式中使用带有 sed 的文件名

c++ - 如何将更改的行与 C 代码的 git 存储库中的函数相关联?

c - c 中的正则表达式无法正常工作

linux - 如何在没有密码的情况下以另一个用户身份运行脚本?

bash - 删除目录下文件下划线