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 

https://stackoverflow.com/questions/31669103/

相关文章:

php - 学说 : Set CURRENT_TIMESTAMP as default value

cordova - 地理位置总是在 cordova 应用程序中超时

sql - 如何用 SQL 删除 Oracle 数据库中的所有数据?

sql-server-2008 - sql server 2008如何计算一年中的天数

webrtc - 我们怎么知道 webRTC 何时已经完成收集 ICE 候选人

git - 为什么 git clone 有时创建一个 .git 目录,有时不创建?

xml - Odoo:如何继承菜单项(使菜单项不可见)

google-cloud-sql - 如何将 ip 地址添加到 cloud sql 访问列表以提供对

php - Laravel 5.1 如何检查目录中是否存在文件?

macos - 尝试安装 pytaglib 1.0.3 但遇到 fatal error