gpt4 book ai didi

bash - 需要帮助在 bash 脚本中使用 grep/egrep 匹配模式

转载 作者:行者123 更新时间:2023-11-29 09:38:56 25 4
gpt4 key购买 nike

我正在尝试匹配给定字符串的所有字符,但这些字符应该按照给定 bash 脚本的顺序匹配。

while [[ $# -gt 0 ]]; do
case $1 in
-i)
arg=$2
egrep "*[$arg]*" words.txt
shift ;;
esac
shift
done

$ sh match_the_pattern.sh -i aei words.txt

应该返回类似的词

abstentious
adventitious
sacrilegiousness

如果您注意到,首先匹配a,然后匹配e,然后匹配i,它们都是按顺序匹配的。此外,整个单词都经过匹配和过滤。

最佳答案

您可以使用 getopts 和一些 bash 参数替换来构造查询字符串。

#!/bin/bash
while getopts 'i:' choice
do
case "${choice}" in
i)
length=${#OPTARG}
for((count=0;count<length;count++))
do
if [ $count -eq 0 ]
then
pattern="${pattern}.*${OPTARG:count:1}.*"
else
pattern="${pattern}${OPTARG:count:1}.*"
fi
done
;;
esac
done
# The remaining parameter should be our filename
shift $(($OPTIND - 1))
filename="$1"
# Some error checking based on the parsed values
# Ideally user input should not be trusted, so a security check should
# also be done,omitting that for brevity.
if [ -z "$pattern" ] || [ -z "$filename" ]
then
echo "-i is must. Also, filename cannot be empty"
echo "Run the script like ./scriptname -i 'value' -- filename"
else
grep -i "${pattern}" "$filename"
fi

引用this了解更多关于参数替换this的信息对于 getopts

关于bash - 需要帮助在 bash 脚本中使用 grep/egrep 匹配模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55787999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com