使用 bash 从数组中提取匹配字符串的最佳方法
Best way to pull a matching string from an array using bash
我有一个示例数组,如下所示;
OVGARR=(ACCS ELB NOVOVG SCN MISOVG)
带有*OVG的字符串的位置可以在任意索引中,而且OVG字符串的类型也有多种。我想获取数组中第一个 *OVG 字符串的值,剪切字符串的“OVG”部分并将其分配给变量。
我最初的解决方案如下;
OV=`printf '%s\n' "${OVGARR[@]}" | grep -P 'OVG$' | head -1 | awk -F'OVG' '{print }'`
虽然可行,但有没有更短、更有效的方法来完成我想做的事情?
不脱壳好像快多了。阅读的难易程度是主观的。
for o in "${OVGARR[@]}" ; do
if [[ $o == *OVG ]] ; then
OV=${o%OVG}
break
fi
done
基于您原来的 awk 解决方案,但不再需要使用 grep 和 head:
OV="$(awk -F 'OVG' '/OVG/ { print ;exit }' <(printf '%s\n' "${OVGARR[@]}"))"
我有一个示例数组,如下所示;
OVGARR=(ACCS ELB NOVOVG SCN MISOVG)
带有*OVG的字符串的位置可以在任意索引中,而且OVG字符串的类型也有多种。我想获取数组中第一个 *OVG 字符串的值,剪切字符串的“OVG”部分并将其分配给变量。
我最初的解决方案如下;
OV=`printf '%s\n' "${OVGARR[@]}" | grep -P 'OVG$' | head -1 | awk -F'OVG' '{print }'`
虽然可行,但有没有更短、更有效的方法来完成我想做的事情?
不脱壳好像快多了。阅读的难易程度是主观的。
for o in "${OVGARR[@]}" ; do
if [[ $o == *OVG ]] ; then
OV=${o%OVG}
break
fi
done
基于您原来的 awk 解决方案,但不再需要使用 grep 和 head:
OV="$(awk -F 'OVG' '/OVG/ { print ;exit }' <(printf '%s\n' "${OVGARR[@]}"))"