Bash shell 使用 sed 做 trim 的動作

Bash shell 想要寫類似 trim() 做前後移除某個符號等動作,要怎麼做呢?

Bash shell 使用 sed 做 trim 的動作

使用 sed 就可以達成,不過很常會使用到,把他包成 shell function 來使用,該怎麼寫呢?

使用 sed 移除字串的前後多個空白

  • 挑其一即可
  • echo ' """abc" "" ' | sed -e 's/^[[:space:]]//' -e 's/[[:space:]]$//'
  • echo ' """abc" "" ' | sed -e 's/^ *//' -e 's/ *$//'
    """abc" ""

使用 sed 移除字串的前後 " (單個 ")

  • echo '"""abc" ""' | sed -e 's/^"//' -e 's/"$//' ""abc" "

使用 sed 移除字串的前後多個空白 和 單個 "

  • echo ' """abc" "" ' | sed -e 's/^ *//' -e 's/ *$//' -e 's/^"//' -e 's/"$//'
    ""abc" "

Shell function trim()

將上述寫成 Bash shell function trim()

  1. vim .bashrc
    function trim() {
        if [ -z $1 ]; then # $1 is unset
            sed -e 's/^ *//' -e 's/ *$//'
        else
            # echo "=== $1 ==="
            sed -e 's/^ *//' -e 's/ *$//' -e "s/^$1//" -e "s/$1$//"
        fi
    }
  2. source .bashrc # 讓 function trim 可以開始使用,下述為使用範例
  3. echo ' """abc" "" ' | trim # 預設移除前後多個空白 """abc" ""
  4. echo ' """abc" "" ' | trim '"' # 移除 "
    ""abc" "
  5. echo ' aa"""abc" ""a ' | trim a # 移除 a
    a"""abc" ""
  6. echo ' aa"""abc" ""a ' | trim "a" # 移除 a
    a"""abc" ""

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料