gpt4 book ai didi

linux - Bash 如何检查参数是否为 sed 模式?

转载 作者:太空宇宙 更新时间:2023-11-04 11:00:26 25 4
gpt4 key购买 nike

我正在编写一个应该接收许多参数的 bash 脚本。这些论点可能很简单,例如:

Myscript [-r] [-l|-u] <dir/file names...>

或者它可能只是一个 sed 模式而不是像这样的简单参数:

Myscript  <sed pattern> <dir/file names...>

所以我的问题是如何检查给定的参数是否是 sed 模式而不是目录路径或文件名?我做了一些事情,但它不适用于很长的路径 (dir1/dir2/dir)

    while [[ $# > 0 ]]
do
key="$1"

case $key in

-ru|-ur)
config_recusive
config_upper
shift
;;
-rl|-lr)
config_recusive
config_lower
shift
;;
-r)
config_recusive
shift
;;
-l)
config_lower
shift
;;
-u)
config_upper
shift
;;
*)
check="^.*/.*/.*$"
if [[ $key =~ $check ]] ; then

config_sed_pattern
else
TARGET=$key
fi
shift
;;
esac
done

为了更清楚,这里是我尝试运行脚本时遇到的问题的示例:

./myscript -u tmp/users/regions

将路径 (tmp/users/regions) 作为 sed 模式感到困惑。希望我足够清楚。等待你的帮助:)谢谢

最佳答案

我想你可以尝试在某些东西上运行那个脚本

echo a | sed "$pattern" >/dev/null 2>/dev/null

然后检查 $?

if [ $? != 0 ]; then # means sed failed
#...

但也许 sed 会认为这也是它的参数。

顺便说一句,使用 getopt 处理参数会让事情变得更容易。

我认为您设计参数格式的方式不好。也许您认为以不同的形式进行论证可以使您的程序看起来充满活力和令人敬畏。但现在你正试图解决一个问题,这与你的正经事无关,浪费你自己的时间和我们的时间。这不好。最好让事情变得愚蠢和清晰。

在你的情况下,也许你可以添加另一个参数来表明它是一个 sed 表达式。

YourScript -e <sed expr> <others>

这样,两周后你就会知道自己做了什么。

关于linux - Bash 如何检查参数是否为 sed 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27190982/

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