簡體   English   中英

Bash如何檢查參數是否為sed模式?

[英]Bash how check if an argument is a sed patterns?

我正在開發一個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模式感到困惑。 希望我足夠清楚。 等待您的幫助:)謝謝

我認為您可以使用try在某些地方運行該腳本

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

然后檢查$?

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

但也許sed也會認為這也是它的理由。

順便說一句,使用getopt處理參數將使事情變得更容易。

我認為您設計參數格式的方式不好。 也許您認為以不同形式編寫參數可能會使您的程序看起來動態而又很棒。 但是現在您正試圖解決問題,這與您的認真工作無關,並且浪費了自己和我們的時間。 這不好。 最好使事情變得愚蠢和清晰。

在您的情況下,也許您可​​以添加另一個參數以顯示它后面是一個sed表達式。

YourScript -e <sed expr> <others>

這樣,您就會對兩周后所做的事情有所了解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM