对shell脚本来说相对较新。我有一个带字符串值的变量。我需要从给定索引开始在该变量中搜索字符串。例如
val="hi hello hi yes no hi good hi"
现在我想在变量val中从索引5开始搜索字符串“hi”。我怎样才能在shell脚本中实现这一点?
答案 0 :(得分:0)
要获得是否匹配,如果匹配,请获取搜索到的字符串的位置。然后你可以提取你想要的任何东西。
if [[ $val =~ ^(.{5}.*?)(hi) ]]
then
echo "match found"
prefix_len=`echo -n ${BASH_REMATCH[1]} | wc -m`
echo "$prefix_len"
else
echo "match not found"
fi
更具体地说,
[[ $val =~ ^.{5}.*hi ]]
# |^^^ ^^-->string you want to search for
# | | |
# | | any characters(including zero character)
# | |
# | any 5 characters
# |
# start of line
有关bash中正则表达式的更多信息:http://tldp.org/LDP/abs/html/x17129.html
答案 1 :(得分:0)
您可以使用${val#????}
去除前五个字符,使用一个简单的case
来检查匹配。
case ${val#?????} in *hi*) echo "match";; esac
答案 2 :(得分:0)
val="hi hello hi yes no hi good hi"
if [ `echo "${val}" | awk '{print $6}'` == "hi" ]
then
echo "Found"
else
echo "Not Found"
fi
或
val="hi hello hi yes no hi good hi"
echo "${val}" | cut -f5 -d' ' | grep -qc hello && echo "Found" || echo "Not Found"
答案 3 :(得分:0)
试试这个......
WITH mylist(w,x,y,z) AS (
SELECT 010, 46793, '329', '10' FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 011, 46798, '322', '12' FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 012, 33333, '111', '14' FROM SYSIBM.SYSDUMMY1
)
SELECT VALUE1, VALUE2, VALUE3
FROM MYTABLE
INNER JOIN mylist
ON (VALUEW, VALUEX, VALUEY, VALUEZ)=(w,x,y,z)
这是使用数组分配所有字符串的解决方案,for命令用于将每个位置与字符串“hi”进行比较
答案 4 :(得分:0)
从索引5和
搜索字符串$val
中的模式
grep pattern <<< ${val:5}