我有一个字符串,
tester_one="update set_tables set abc=7 where bcd=9"
这里我只想提取“set”和“where”之间的部分,
abc=7
我尝试了几个Unix命令,但是在我希望它接收的部分之前,它发现了 set 或遇到的任何地方。
我知道如何使用Java但我在Unix中迷失了,因为我是新手。
答案 0 :(得分:3)
$ 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
$ echo "$tester_one" | awk '{sub(/.*set /,""); sub(/ where.*/,""); print;}'
abc=7
如果你的grep支持-P
(perl-like)选项:
$ echo "$tester_one" | grep -oP '(?<=set ).*(?= where)'
abc=7
答案 1 :(得分:1)
你可以用sed把它拿出来。类似的东西:
echo "$tester_one" | sed 's/.* set \(.*\) where .*/\1/'
答案 2 :(得分:1)
#!/bin/bash
tester_one="update set_tables set abc=7 where bcd=9"
pat=".* set (.*) where"
[[ $tester_one =~ $pat ]]
echo "${BASH_REMATCH[1]}"
答案 3 :(得分:1)
您还可以使用set
和where
作为字段分隔符,并打印位于它们之间的字段:
$ awk -F"set | where" '{print $2}' <<< "update set_tables set abc=7 where bcd=9"
abc=7
答案 4 :(得分:0)
与your other question一样,这可以在纯bash中实现,而无需使用sed / awk / grep等外部工具。
#!/usr/bin/env bash
tester_one="update set_tables set abc=7 where bcd=9"
output="${tester_one#* set }"
output="${output% where }"
echo "$output"
注意&#34; set&#34;周围的空格。和&#34;其中&#34;在参数扩展行中。正如您所料,如果$tester_one
变量包含不同的&#34; set&#34;,那么您需要小心这一点。或&#34;其中&#34;在你不期望的地方。
那就是说,我更喜欢Jahid's answer。 : - )