bash - 在 Unix 中提取变量中两个字符串之间的部分

标签 bash unix

我有一个字符串,

tester_one="update set_tables set abc=7 where bcd=9"

这里我只想提取“set”和“where”之间的部分,

abc=7

我尝试了几个 Unix 命令,但它在我希望它获取的部分之前获取了任何出现的 set 或遇到的地方。

我对如何使用 Java 有一个想法,但我对 Unix 很陌生,因为我是新手。

最佳答案

使用 sed

$ echo "$tester_one" | sed -E 's/.*set (.*) where.*/\1/'
abc=7

将其捕获到变量中:

$ new=$(echo "$tester_one" | sed -E 's/.*set (.*) where.*/\1/')
$ echo $new
abc=7

使用 awk

$ echo "$tester_one" | awk '{sub(/.*set /,""); sub(/ where.*/,""); print;}'
abc=7

使用 grep -P

如果你的 grep 支持 -P (perl-like) 选项:

$ echo "$tester_one" | grep -oP '(?<=set ).*(?= where)'
abc=7 

关于bash - 在 Unix 中提取变量中两个字符串之间的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31669103/

相关文章:

python - 在databricks初始化脚本中定义环境变量

bash - 使用 sed 在所有方程编号周围添加括号

linux - 不能以 root 身份修改或删除?

linux - 如何根据字符代码或 ASCII 码值对文本文件进行排序?

linux - 无与伦比的'。设置别名时出错

linux - 通过 SSH 连接代理命令

c - stdlib.h 和 sys/wait 中等待的区别

linux - 我的 shell 脚本使用的语法是否正确?

bash:/usr/local/sphinx/bin/search:没有这样的文件或目录

Bash getopts 删除最后一个参数