我有包含以下单词的文件
gl-events_0
gl-events_1
gl-events_2
gl-mx-events_0
gl-mx-events_1
gl-mx-events_2
所以我想如果 gl-events 中的匹配模式它应该运行命令 A 如果模式是 gl-mx-events 它应该运行命令 B
我尝试了下面的方法,但它对我不起作用
STR='gl-mx-events_0'
SUB='gl-mx-events'
if [[ "$STR" == *"$SUB"* ]]; then
echo "you need to run command B"
我的要求是模式是否根据单词匹配,它应该运行
command A --- (only for gl-events_0 ...... gl-events_10)
command B --- (only for gl-mx-events_0 ...... gl-mx-events_10)
有人可以指导我如何实现这一目标吗?
问候,武士
答案1
像这样的东西吗?
n=1
while IFS= read -r line; do
if [[ $line = *gl-events* ]]; then
printf "line %d has gl_events, doing something\n" "$n"
# run command A with "$line"
fi
if [[ $line = *gl-mx-events* ]]; then
printf "line %d has gl-mx-events, doing something different\n" "$n"
# run command B with "$line"
fi
n=$((n+1))
done < file
但就像 @Panki 的评论所说,您还可以grep
根据关键字过滤行,然后执行xargs
所需的命令。例如,使用 GNU 版本的 xargs:
< file grep ^gl-events_ |xargs -d '\n' -n1 echo "running command A with arg"
< file grep ^gl-mx-events_ |xargs -d '\n' -n1 echo "running command B with arg"
(默认情况下xargs
对待任何输入中的空格分隔输入元素,并以与任何内容都不兼容的方式解释引号和反斜杠。告诉-d '\n'
它按原样使用输入行。)